this用法如下:
1.使用this来显示地标识字段的所有者(有点官方味道,看下例子就清楚了)
class
Student
{
public string FirstName;
public string LastName;
public int Scroe;
public void SetName( string firstName, string lastName)
{
this .FirstName = firstName;
this .LastName = lastName;
}
}
{
public string FirstName;
public string LastName;
public int Scroe;
public void SetName( string firstName, string lastName)
{
this .FirstName = firstName;
this .LastName = lastName;
}
}
2.使用this来传递当前正在执行的对象的一个引用
class
Student
{
public string FirstName;
public string LastName;
public int Score;
public void NewStudent()
{
Help.Insert( this );
}
}
class Help
{
public static void Insert(Student student)
{
// ....
}
}
{
public string FirstName;
public string LastName;
public int Score;
public void NewStudent()
{
Help.Insert( this );
}
}
class Help
{
public static void Insert(Student student)
{
// ....
}
}
3.使用this调用另一个构造器
class
Student
{
public Student( string firstName, string lastName)
{
FirstName = firstName;
LastName = last;
}
// 如果我想重载一个构造函数,这个构造函数与上面的相比只是多了个参数Id,那我就可以这样做,
public Student( int score, string firstName, string lastName):
this (firstName,lastName)
{
Scroe = score; // 使用this关键字后不用写FirstName=firstName。。。
}
}
{
public Student( string firstName, string lastName)
{
FirstName = firstName;
LastName = last;
}
// 如果我想重载一个构造函数,这个构造函数与上面的相比只是多了个参数Id,那我就可以这样做,
public Student( int score, string firstName, string lastName):
this (firstName,lastName)
{
Scroe = score; // 使用this关键字后不用写FirstName=firstName。。。
}
}
4.this用于扩展方法:C#3.0通过这个改进,就能为任何类添加实例方法。扩展方法的要求如下:
1)第一个参数是要扩展或者要操作的类型,这称为被扩展的类型
2)在被扩展的类型名称前面附加this修饰符。
3)引入扩展类型的命名空间
5.在引用类型的构造器以及值类型的构造器的使用
C#不允许值类型定义无参的构造器(但是CLR是可以的),值类型的每一个字段的写入优先读取。值类型的每一个构造器必须初始化所有的类型字段。下面代码会报错:
internal struct SomeValType { private Int32 m_x, m_y;
private char m_z; public SomeValType(Int32 x) { m_x = x; } }
一个替代的办法是使用this,如下:
public SomeValType(Int32 x) { this = new SomeValType(); //此时,m_x和m_y为0,m_z为\0。 m_x = x; //这里m_x赋予了新的参数x的值 }
在值类型的构造器里面,this代表一个值类型的实例并且可以给它赋值。在引用类型构造器中,this是只读的不能赋值。