C#中this的用法集锦
2015-06-04 09:14
2001 查看
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#调用COM组件
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#通用邮件发送类分享
- C#中Equality和Identity浅析
- C#生成饼形图及添加文字说明实例代码
- C#判等对象是否相等的方法汇总
- C#简单的向量用法实例教程
- C#托管堆对象实例包含内容分析
- C#实现按照指定长度在数字前补0方法小结
- C#虚方法的声明和使用实例教程
- C#获取文件夹及文件的大小与占用空间的方法
- C#定义简单的反射工厂实例分析
- C#数字图象处理之肤色检测的方法
- C#实现用于操作wav声音文件的类实例
- C#选择排序法实例分析
- C#线程间不能调用剪切板的解决方法
- C#实现WinForm捕获最小化事件的方法