借鉴自:https://www.jb51.net/article/67204.htm
this用来区分重名的数据成员和形参
当类中函数的数据成员和函数的形参重名的时候,可以使用this来区分
public class User
{
public int ID { get; set; }
public string UserName { get; set; }
public User(int UserID, string UserName)
{
this.UserName = UserName; //使用this来区分
this.ID = UserID;
}
}
this作为构造函数初始化语句
public class VIP : User
{
public int integral { get; set; }
public VIP()
{
ID = 520;
integral = 1000;
}
public VIP(int UserID, string UserName)
: base(UserID, UserName) //调用父类的重载构造函数
{
}
public VIP(string UserName) : this() //用本类中的无参构造函数来初始化这个构造函数
{
this.UserName = UserName;
}
public VIP(int ID) : this(ID, "gcq") //用本类中含有俩个参数的构造函数来初始化这个函数
{
}
public void Say([GCQ] User user)
{
Console.WriteLine(string.Format("名字:{0} ID:{1}", user.UserName, user.ID));
}
}
this作为索引器的关键字
具体可查看具体介绍索引器那篇文章
public class User
{
Dictionary<string, object> dicInfo = null;
public int ID { get; set; }
public string UserName { get; set; }
public User()
{
dicInfo = new Dictionary<string, object>();
}
public User(int UserID,string UserName)
{
this.UserName = UserName;
this.ID = UserID;
}
//索引器
public object this[string name] //在名字位置是关键字this
{
get { return dicInfo.ContainsKey(name) ? dicInfo[name] : null; }
set { dicInfo[name] = value; }
}
}
this作为参数传递
//this当作参数传递
public void Said()
{
new VIP().Say(this);
}
this用来扩展某个类的方法(this必须修饰第一个参数,用于扩展的类必须使用static修饰)
如果静态类A中静态函数的参数为B类类型,当使用this来修饰这个参数时,则可以实现B类的扩展,如果函数有多个参数,this只能用来修饰函数的第一个参数,也是说这个函数可以通过B.出来,成为B类的一部分,当调用的时候参数的填写则跳过使用this修饰的参数,它的用途大多用于给底层类库扩展成员方法,因为底层类库是不可修改的,如果你想为底层某个类库增加一个方法,则可以通过使用this来扩展,这样就可以通过底层类.出这个函数了。
//静态类,来扩展User类
public static class Helper
{
//this扩展User类 可以通过User类来调用func这个函数
public static void func(this User user,int age)
{
Console.WriteLine(string.Format("名字:{0} ID:{1} 年龄:{2}", user.UserName, user.ID, age));
}
}
namespace lianxi
{
public class User
{
Dictionary<string, object> dicInfo = null;
public int ID { get; set; }
public string UserName { get; set; }
public User()
{
dicInfo = new Dictionary<string, object>();
}
public User(int UserID, string UserName)
{
this.UserName = UserName;
this.ID = UserID;
}
//this当作参数传递
public void Said()
{
new VIP().Say(this);
}
//索引器
public object this[string name] //在名字位置是关键字this
{
get { return dicInfo.ContainsKey(name) ? dicInfo[name] : null; }
set { dicInfo[name] = value; }
}
}
public class VIP : User
{
public int integral { get; set; }
public VIP()
{
ID = 520;
integral = 1000;
}
public VIP(int UserID, string UserName)
: base(UserID, UserName) //调用父类的重载构造函数
{
}
public VIP(string UserName) : this() //用本类中的无参构造函数来初始化这个构造函数
{
this.UserName = UserName;
}
public VIP(int ID) : this(ID, "gcq") //用本类中含有俩个参数的构造函数来初始化这个函数
{
}
public void Say([GCQ] User user)
{
Console.WriteLine(string.Format("名字:{0} ID:{1}", user.UserName, user.ID));
}
}
//静态类,来扩展User类
public static class Helper
{
//this扩展User类 可以通过User类来调用func这个函数
public static void func(this User user,int age)
{
Console.WriteLine(string.Format("名字:{0} ID:{1} 年龄:{2}", user.UserName, user.ID, age));
}
}
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Parameter)]
public class GCQAttribute : Attribute
{
}
class Program
{
static void Main(string[] args)
{
User u = new User(1, "小明");
u.Said(); //作参数传递 打印 名字:小明 ID:1
VIP v = new VIP(2);
v.func(100); //用来扩展类方法,调用的时候跳过this修饰的参数 打印 名字:100
}
}
}
本文详细解析了C#中this关键字的多种用途,包括区分重名的数据成员和形参、作为构造函数初始化语句、作为索引器的关键字以及作为参数传递等。同时介绍了如何使用this来扩展类的方法。
8246

被折叠的 条评论
为什么被折叠?



