用法一 this代表当前类的实例对象
用法二 用this串联构造函数
namespace Demo
{
public class Test
{
public Test()
{
Console.WriteLine("无参构造函数");
}
// this()对应无参构造方法Test()
// 先执行Test(),后执行Test(string text)
public Test(string text) : this()
{
Console.WriteLine(text);
Console.WriteLine("有参构造函数");
}
}
class Program
{
static void Main(string[] args)
{
try
{
Test test = new Test("张三");
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
finally
{
Console.ReadLine();
}
}
}
}
用法三:C# 用this修饰符为原始类型扩展方法(暂时了解)
特点:1、静态类 2、静态方法 3、第一个参数前加this
例如:public static List<T> ToList<T>(this string Json),就是为this对应的string类型扩展类ToList()方法,调用方式strJson.ToList();
用法四:
C#性能优化篇 - 基于索引器封装
2.通过索引器访问实例成员
通过观察上面示例的代码,可以发现:该类的所有成员具有相同的类型float,它们其实可以像访问数组一样的方式访问,所以,我们可以为类提供另一种实例成员访问方式:索引器。下面的代码为上面的Course类声明加上了一个float类型的索引,并在Main方法中通过索引存取数据:
1 class Course
2 {
3 publicfloat Chinese { set; get; }
4 public float Math { set; get;}
5 public float Englisth { set;get; }
6
7 // 声明一个公开的float类型的索引器
8 public float this[int index]
9 {
10 // set访问器:赋值
11 set
12 {
13 switch (index)
14 {
15 case 0:
16 this.Chinese = value;
17 break;
18 case 1:
19 this.Math = value;
20 break;
21 case 2:
22 this.Englisth = value;
23 break;
24 default:
25 // 索引越界时抛出异常
26 throw newArgumentOutOfRangeException();
27 }
28 }
29 // get访问器:取值
30 get
31 {
32 switch (index)
33 {
34 case 0:
35 return this.Chinese;
36 case 1:
37 return this.Math;
38 case 2:
39 return this.Englisth;
40 default:
41 throw newArgumentOutOfRangeException();
42 }
43 }
44 }
45 }
46
47 class Program
48 {
49 static void Main(string[] args)
50 {
51 // 声明一个Course类的实例
52 var course = new Course();
53
54 // 使用索引器访问实例成员
55 // 赋值
56 course[0] = 95;
57 course[1] = 100;
58 course[2] = 80;
59 // 取值
60 Console.WriteLine("语文:{0},数学:{1},英语:{2}",course[0], course[1], course[2]);
61 Console.ReadKey();
62 }
63 }
索引器和属性的比较
1.相同点
1).索引和属性都不用分配内存位置来存储。
2).索引和属性都是为类的其它成员提供访问控制的。
3).索引和属性都有get访问器和set访问器,它们可以同时声明两个访问器,也可以只声明其中一个。
2.不同点
1).属性通常表示单独的数据成员,而索引表示多个数据成员。
2).属性既可以声明为实例属性,也可以声明为静态属性,而索引不能声明为静态的。
3).属性有简洁的自动实现属性,而索引必须声明完整。
4).get访问器:属性的 get 访问器没有参数,索引器的 get 访问器具有与索引器相同的形参表。
5).set访问器:属性的 set 访问器包含隐式 value 参数。除了值参数外,索引器的 set 访问器还具有与索引器相同的形参表。
多访问、非静态、有额外参数