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(); }
最终结果示意图
以上所述上就是本文的全部内容了,希望大家能够喜欢。
新闻热点
疑难解答