this 关键字
导读
本文将列举C#中this关键字的用途
1、this 含义
2、用this 关键字避免参数与字段的混淆
3、用this关键字串联构造器
4、索引器
6、Visitor 模式
this 含义
C# 允许在类的所有实例方法中使用 this 关键字。this 关键字表示对当前对象的引用,因此this不允许出现在静态方法中。
用 this 关键字避免参数与字段的混淆
在方法体中,类实例成员可以通过 this 访问,不带this 前缀的标识符优先为参数名。看代码
static class App { static void Main() { Lib l = new Lib(); l.ChangArg("222"); } } class Lib { private string arg; public void ChangArg(string arg) { arg = arg; // 会有警告 this.arg = arg; 便可避免 } }
用this关键字串联构造器
将所有构造器的主要逻辑提取出来放在一个构造器内,其他构造器按照参数调用即可,看代码
using System; static class App { static void Main() { Lib l1 = new Lib(); l1.Print(); Lib l2 = new Lib(new object()); l2.Print(); } } class Lib { private object _args ; // this 串联构造器 public Lib():this(null){} public Lib(object args) { this._args = args; } public void Print() { Console.WriteLine(_args==null?"非空构造器生成":"空构造器生成"); } }
索引器
索引器的语法中用到this,看代码
using System; using System.Collections.Generic; static class App { static void Main() { Lib l = new Lib(); Console.WriteLine(l[0]); // 用索引器 } } class Lib { private List<string> _list; public Lib() { _list = new List<string>(); _list.Add("Apple"); _list.Add("MS"); _list.Add("Google"); } // 定义索引器 public string this[int index] { get { if(index >=0 && index <= 2) { return _list[index]; } return null; } } }
Visitor 模式
this 关键字的一个用法是将当前对象的引用传递给其他方法,甚至其他的类,通常这种方法预示着扩展架构,如 Visitor 模式,看代码
class Foo { // 一个实例方法 void fct() { fct2(this); } static void fct2(Foo foo) { // 操作foo实例,可能对其扩展 } }
本文完