C#中this的用法集锦

this 关键字引用类的当前实例,还可用作扩展方法的第一个参数的修饰符。下面就针对this的四种用法,做简单的总结。

首先,我们分别创建User和VIP两个C#类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AppConsole
{

  /// <summary>
  /// 普通用户
  /// </summary>
  public class User
  {
    /// <summary>
    /// 全局变量
    /// </summary>
    Dictionary<string, object> dictInfo = null;

    /// <summary>
    /// 构造器
    /// </summary>
    public User()
    {
      dictInfo = new Dictionary<string, object>();
    }

    /// <summary>
    /// 构造函数重载
    /// </summary>
    /// <param name="UserID"></param>
    /// <param name="UserName"></param>
    public User(int UserID, string UserName)
    {
      this.UserName = UserName;
      this.ID = UserID;
    }

    /// <summary>
    /// this,第【1】种用法,索引器
    /// </summary>
    /// <param name="name"></param>
    /// <returns></returns>
    public object this[string name]
    {
      get { return dictInfo[name]; }
      set { dictInfo[name] = value; }
    }

    /// <summary>
    /// 编号
    /// </summary>
    public int ID { get; set; }

    /// <summary>
    /// 用户名
    /// </summary>
    public string UserName { get; set; }

    /// <summary>
    /// this第【2】种用法,当做参数传递
    /// </summary>
    public void Said()
    {
      new VIP().Say(this);
    }

  }

  /// <summary>
  /// 会员
  /// </summary>
  public class VIP : User
  {

    /// <summary>
    /// 积分
    /// </summary>
    public int integral { get; set; }

    /// <summary>
    /// 构造函数
    /// </summary>
    public VIP()
    {
      ID = 520;
      integral = 1000;
    }

    /// <summary>
    /// this第【3】种用法,通过this()调用无参构造函数
    /// </summary>
    /// <param name="UserName"></param>
    public VIP(string UserName)
      : this()
    {
      this.UserName = UserName;
    }

    /// <summary>
    /// 构造函数重载
    /// </summary>
    /// <param name="UserID"></param>
    /// <param name="UserName"></param>
    public VIP(int UserID, string UserName)
      : base(UserID, UserName)
    {

    }

    /// <summary>
    ///Say方法
    /// </summary>
    /// <param name="user"></param>
    public void Say([LCQAttribute] User user)
    {
      Console.WriteLine(string.Format("嗨,大家好!我的编号是{0},大家可以叫我{1}!", user.ID, user.UserName));
    }

  }

  /// <summary>
  /// 静态类,来扩展User类
  /// </summary>
  public static class Helper
  {

    /// <summary>
    /// 第【4】种用法: this扩展User类
    /// </summary>
    /// <param name="user"></param>
    public static void Sing(this User user)
    {
      Console.WriteLine(string.Format("嗨,大家好!我的编号是{0},大家可以叫我{1}!", user.ID, user.UserName));
    }
  }

  /// <summary>
  /// 特性类:指定特性仅适用于方法和方法的参数
  /// </summary>
  [System.AttributeUsage(AttributeTargets.Method | AttributeTargets.Parameter)]
  public class LCQAttribute : System.Attribute
  {

  }
}

this第【1】种用法,索引器

/// <summary>
/// 全局变量
/// </summary>
Dictionary<string, object> dictInfo = null;

/// <summary>
/// this,第【1】种用法,索引器
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public object this[string name]
{
  get { return dictInfo[name]; }
  set { dictInfo[name] = value; }
}

this第【2】种用法,当做参数传递

/// <summary>
/// this第【2】种用法,当做参数传递
/// </summary>
public void Said()
{
  new VIP().Say(this);
}

this第【3】种用法,通过this()调用无参构造函数

/// <summary>
/// this第【3】种用法,通过this()调用无参构造函数
/// </summary>
/// <param name="UserName"></param>
public VIP(string UserName)
  : this()
{
  this.UserName = UserName;
}

this第【4】种用法:扩展User类

/// <summary>
/// 静态类,来扩展User类
/// </summary>
public static class Helper
{

  /// <summary>
  /// 第【4】种用法: this扩展User类
  /// </summary>
  /// <param name="user"></param>
  public static void Sing(this User user)
  {
    Console.WriteLine(string.Format("嗨,大家好!我的编号是{0},大家可以叫我{1}!", user.ID, user.UserName));
  }
}

最后,控制台测试

/// <summary>
/// 主程序入口
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{

  //0>声明实体
  User user = new User();
  user.ID = 1;
  user.UserName = "lichaoqiang";

  //第【一】种用法:this用作索引器 public object this[string name]{……}
  user["UserID"] = 1;
  Console.WriteLine("第【一】种用法:this用作索引器");

  //第【二】种用法:this用作参数传递 user.Say(this);
  Console.WriteLine("第【二】种用法:this用作参数传递");
  user.Said();

  //第【三】种用法:this() public VIP:this(){  }
  VIP vip = new VIP("yezi");
  vip.Said();
  Console.WriteLine("第【三】种用法:this()");

  //第【四】种用法: this扩展VIP类 public static Sing(this User user){……}
  Console.WriteLine("第【四】种用法: this扩展VIP类");
  user.Sing();

  Console.Read();

}

最终结果示意图

以上所述上就是本文的全部内容了,希望大家能够喜欢。

(0)

相关推荐

  • C# this关键字的四种用法

    本文实例为大家分享了C# this关键字的四种用法,供大家参考,具体内容如下 用法一  this代表当前实例,用this.显式调用一个类的方法和成员 namespace Demo { public class Test { private string scope = "全局变量"; public string getResult() { string scope = "局部变量"; // 在这里,this代表Test的实例,所以this.scope指向的是全局变量

  • c#多线程中Lock()关键字的用法小结

    本文介绍C# lock关键字,C#提供了一个关键字lock,它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待. 每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数.这可能带来的问题就是几个线程同时执行一个函数,导致数据的混乱,产生不可预料的结果,因此我们必须避免这种情况的发生. 其中,lock是一种比较好用的简单的线程同步方式,它是通过为给定对象获取互斥锁来实现同步的.它可以保证当一个线程在关键

  • C# 参考之访问关键字:base、this

    base base 关键字用于从派生类中访问基类的成员: 调用基类上已被其他方法重写的方法.  指定创建派生类实例时应调用的基类构造函数.  基类访问只能在构造函数.实例方法或实例属性访问器中进行. 示例: 在派生类中调用基类方法.  // base 关键字 // 访问基类成员 using System; public class BaseClass {     protected string _className = "BaseClass"; public virtual void

  • C# dynamic关键字的使用方法

    C#是一种类型安全的编程语言(所有表达式都能解析成某个类型的实例,在编译器生成的代码中,只会执行对这个类型有效的操作),和非类型安全的语言相比,类型安全的优势就体现出来了:1.许多错误能在编译时检测到,取保代码在执行它之前是正确的.2.编译时语言通常能生成更小,更快的代码.(在编译时进行更多的假设,并在IL和元数据中落实那些假设) 为了方便开发人员使用反射或者与基本组件通信,dynamic诞生了!一下代码展示了如何利用反射在一个String目标("根据我找类型")上调用一个方法(&qu

  • C#中this指针的用法示例

    本文实例展示了C#中this指针的用法,对于初学者进一步牢固掌握C#有很大帮助,具体内容如下: 一.this指针是什么: 这里有一些面向对象编程的概念需要说明:类(Class)的概念和对象(Object)的概念 类是对事物概括,也是C#编码时所有代码归属的基本单位:而对象是对类的实例化,也就是C#里new方法的返回值.写代码是不能直接用操作类,而只能先实例化类,然后我们用这个类被实例化后的对象. 通俗一些的说明是,"类"好比是"人"的概念,而我们把类实例化后,就成为

  • C#中this的使用实例分析

    this关键字在C#程序设计中的应用非常频繁,今天本文就this关键字的用法做一番分析,希望能提对大家的C#程序设计有一定的帮助作用.具体分析如下: 1.代表当前类,在当前类中可使用this访问当前类成员变量和方法(需要注意的是 静态方法中不能使用this),也可用于参数传递,传递当前对象的引用. 示例代码如下: class Program { static void Main(string[] args) { thisClass testObj = new thisClass(); Conso

  • C#中this用法系列(二) 通过this修饰符为原始类型扩展方法

    定义一个静态类,类中定义静态方法,方法中参数类型前边加上this修饰符,即可实现对参数类型的方法扩展 示例如 namespace Demo{ // 这里的类必须为静态类 public static class Json { // 方法为静态方法 // this修饰符后边是string类型,即为string类型扩展出了ToJson方法 public static object ToJson(this string Json) { return Json == null ? null : JsonC

  • C#基础知识之this关键字介绍

    一.this可以代表引用类的当前实例,包括继承而来的方法,通常可以省略. 复制代码 代码如下: public class Person {     public string Name { get; set; }     public int Age { get; set; }     public Person(string Name, int Age)     {         this.Age = Age;         this.Name = Name;     } } 这个不用多说

  • c#访问this关键字和base关键字示例

    指定创建派生类实例时应调用的基类构造函数: 调用基类上已被其他方法重写的方法. 注意:不能从静态方法中使用base关键字,base关键字只能在实例构造函数.实例方法或实例访问器中使用. 例:访问关键字this和base关键字示例:创建基类Person,包含两个数组成员name和age.一个具有两个参数的构造函数.一个虚函数GetInfo()以显示数据成员name和age的内容:创建派生类Student,包含一个数据成员studentId,一个具有三个参数的派生类构造函数,并用:base调用基类构

  • C#使用this关键字实现串联构造函数调用方法

    本文实例讲述了C#使用this关键字实现串联构造函数调用方法.分享给大家供大家参考.具体分析如下: 在一个类中如果需要实现多个自定义构造函数,通常做法是在构造函数中实现各自的业务逻辑,如果这些业务逻辑的实现并非截然不同的话,显然不符合oop编程思想,极不利于维护,当然,我们也可以通过将相同的逻辑部分封装成一个方法,但还有一种更为合理简单的方法,下面就通过this关键字来实现串联构造函数做一简单示例. 示例代码如下: 复制代码 代码如下: public class Person {       

随机推荐