欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#中this的用法集锦

程序员文章站 2022-06-09 13:48:25
this 关键字引用类的当前实例,还可用作扩展方法的第一个参数的修饰符。下面就针对this的四种用法,做简单的总结。 首先,我们分别创建user和vip两个c#类...

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();
 
}

最终结果示意图

C#中this的用法集锦

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