黑马程序员技术交流社区

标题: this和base的区别 [打印本页]

作者: 刘明杰    时间: 2013-2-1 23:33
标题: this和base的区别
学完了类的继承,对this和base的用法有点模糊,所以求教
作者: 徐荣权    时间: 2013-2-2 00:21
1,C# "this " keyword
其作用引用类的当前实例,其实看了下面这个例子就好理解了。
主要三个作用:当前实例、参数传递和索引器
1.1 当前实例
class Team
{
///成员变量
private string name;
///构造函数
public Team(string name)
{
this.name = name;
}
}
在这里因为是要将参数的name值传入Team类或者说对象的name成员变量中.
在这里通过使用this可以表明name的对象是当前的实例,也就是Team对象,而不是参数name.
1.2 参数传递
另外还有一个作用就是可以做为 '指针 '来使用,可以将当前对象元素按照引用参数方式传递。
例如:
class A
{
public string name = "liangzhen ";
public A(){
}
}
class B
{
private A a;
public void B(A a)
{
this.a = a;
}
public void Change()
{
this.a.name = "kathy ";
}
}
class Demo
{
static void Main()
{
A a = new A();
   B b = b(a);
b.Change();
}
}
这里完成的是一个引用参数传递,在这里如果B对象中执行Change方法后,B和A所对于得实例中的name都将改变为 "kathy ".
3,索引器
最简单的知识,不多说了看一个例子
public object this [int param]
{
get { return array[param]; }
set { array[param] = value; }
}
2,C# "base " keyword
base其实最大的使用地方在面相对性开发的多态性上,base可以完成创建派生类实例时调用其基类构造函数或者调用基类上已被其他方法重写的方法。
例如,
关于base调用基类构造函数
public class A
{
public A()
{
Console.WriteLine( "Build A ");
}
}
public class B:A
{
public B():base()
{
Console.WriteLine( "Build B ");
}
}
如果创建一个B的实例对象,获得结果将是同时打印Build A和Build B.
关于base在派生类中调用基类的方法。
public class A
{
public virtual void Hello()
{
Console.WirteLine( "Hello ");
}
}
public class B : A
{
public override void Hello()
{
base.Hello();//调用基类的方法,显示Hello
Console.WirteLine( "World ");
}
}
这样如果程序调用B.Hello()获得的效果将会使Hello World.
最后补充下,根据MSDN Library介绍来看这两个关键字都是属于[访问关键字]类型。
作者: 乔培培    时间: 2013-2-2 10:19
this表示自己的
base表示基类的
就是这样....我就是这样...认为
作者: HM刘磊    时间: 2013-2-3 18:06
this就是对当前(current)类对象的引用
而base是对继承的父类对象成员的引用。
作者: 杨杨    时间: 2013-2-4 09:24
this 就是当前对象 就是你 new 的对象的引用 而base 就是父类的引用
作者: 黄林    时间: 2013-2-6 13:44
补充一点吧,当一个类中有多个构造函数时,可以用this关键字,表示调用当前构造函数前调用当前类中对应参数的构造函数

public A():this(i)
{}
public A(int i):this(i,j)
{}
public A(int j,int j)
{}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2