4 本我 15小时前 45次点击
除了使用base关键字外,还可以使用this关键字。与base一样,this也可以用在类成员的内部,且该关键字也引用对象实例。只是this引用的是当前的对象实例(即不能在静态成员中使用this关键字,因为静态成员不是对象实例的一部分)。
this关键字最常用的功能是把当前对象实例的引用传递给一个方法,如下例所示:
public void doSomething()
{
MyTargetClass myObj = new MyTargetClass();
myObj.DoSomethingWith(this);
}
其中,被实例化的MyTargetClass实例(myObj)有一个DoSomethingWith()方法,该方法带一个参数,其类型与包含上述方法的类兼容。这个参数类型可以是类的类型、由这个类继承的类类型,或者由这个类或System.Object实现的一个接口。
this关键字的另一个常见用法是限定局部类型的成员,例如:
public class MyClass
{
private int someData;
public int SomeData
{
get
{
return
this
.someData;
}
}
}
许多开发人员都喜欢这个语法,它可以用于任意成员类型,因为可以一眼看出引用的是成员,而不是局部变量。
示例
namespace 练习a
{
//定义类MyTargetClass
public class MyTargetClass
{
//定义方法,他的参数是CallerClass
public void DoSomethingWith(CallerClass caller)
{
WriteLine("MyTargetClass收到CallerClass的方法");
WriteLine($"MyTargetClass{caller.Name}");
}
}
//定义类CallerClass
public class CallerClass
{
//定义字段
public string Name { get; set; }
//定义方法
public void DoSomething()
{
WriteLine($"CallerClass{this.Name}");
//创建对象myObj
MyTargetClass myObj = new MyTargetClass();
myObj.DoSomethingWith(this);
}
}
class Program
{
static void Main(string[] args)
{
//创建对象caller1
CallerClass caller1 = new CallerClass();
//给类callerClass里的字段Name赋值
caller1.Name = "caller1";
caller1.DoSomething();
ReadKey();
}
}
}