A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ┾——黑马 中级黑马   /  2013-9-21 18:39  /  1943 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ┾——黑马 于 2013-9-22 10:34 编辑

求解this和base的关系和用法

评分

参与人数 1技术分 +1 收起 理由
曹伟 + 1

查看全部评分

2 个回复

倒序浏览
首先说关系:base和this在C#中都被归于访问关键字,就是用于实现继承机制的访问操作,来满足对对象成员的访问,从而为多态机制提供更加灵活的处理方式。
this是指当前对象本身,而base则是在继承类中访问基类时用的,只有对继承关系的类才有意义说base。base继承父类的方法,this指当前的类。
用法:
this:this操作数代表的是指向当前对象的参考指针。也就是说,在建立对象的实体后,我们就可以使用this来存取到此对象实体。通俗的说,就是this是获得当前的对象,通过this.调用当前对象的属性或者方法。另外,this操作数也可以用来解决名称相同的问题。
base:
1.用于从派生类中访问基类的成员:调用基类上已被其他方法重写的方法。
2.指定创建派生类实例时应调用的基类构造函数。
3.基类访问只能在构造函数、实例方法或实例属性访问器中进行。

评分

参与人数 1技术分 +1 收起 理由
曹伟 + 1

查看全部评分

回复 使用道具 举报
关于使用到了两个C#关键字this和base。
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介绍来看这两个关键字都是属于[访问关键字]类型。

评分

参与人数 1技术分 +1 收起 理由
曹伟 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马