在派生类中继承基类的时候,也就继承基类的实现代码,所以在派生类中可以把有些方法隐藏掉(或者说可以直接使用)例如下面的隐藏,(为什么隐藏给的原因的是代码不像预期那样工作了)
public class MyBaseClass
{
public void DoSomething()
{
// Base implementation.
}
}
public class MyDerivedClass : MyBaseClass
{
public void DoSomething()
{
// Derived class implementation, hides base implementation.
}
}
但是这样会出错的,如果我们无意间隐藏了一个需要使用的成员,这时候需要修正的。(如果系统提示隐藏了一个成员,而你又找不到问题所在,这就是你隐藏了基类的一个成员)但是如果你是故意想隐藏这个成员的话,那么需要在代码前加NEW的
new public void DoSomething()
{
// Derived class implementation, hides base implementation.
}
当然也可以在派生类中重写基类的方法(前提基类的方法是抽象的虚拟的)见例子
public class MyBaseClass
{
public virtual void DoSomething()
{
Console.WriteLine("Base imp");
}
}
public class MyDerivedClass : MyBaseClass
{
public override void DoSomething()
{
Console.WriteLine("Derived imp");
}
}
当然也可以用NEW,这时候基类方法就无所谓了见下例:
public class MyBaseClass
{
public virtual void DoSomething()
{
Console.WriteLine("Base imp");
}
}
public class MyDerivedClass : MyBaseClass
{
new public void DoSomething()
{
Console.WriteLine("Derived imp");
}
}
无论是重写成员还是隐藏成员,都可以在派生类的内部访问基类成员。这在许多情况下都是很
有用的,例如:
1 要对派生类的用户隐藏继承的公共成员,但仍能在类中访问其功能。
2要给继承的虚拟成员添加实现代码,而不是简单地用重写的新执行代码替换它。
为此,可以使用 base 关键字,它表示包含在派生类中的基类的实现代码(在控制构造函数时,
其用法是类似的,如第9 所述),例如:
public class MyBaseClass
{
public virtual void DoSomething()
{
// Base implementation.
}
}
public class MyDerivedClass : MyBaseClass
{
public override void DoSomething()
{
// Derived class implementation, extends base class implementation.
base.DoSomething();
// More derived class implementation.
}
}
这段代码执行包含在 MyBaseClass 中的 DoSomething()版本,MyBaseClass 是 MyDerivedClass
的基类,而DoSomething()版本包含在MyDerivedClass 中。因为base 使用的是对象实例,所以在静
态成员中使用它会产生错误。
而另外一个关键字this则是在当前对象的实例,(直接上例子啦)
public void doSomething()
{
MyTargetClass myObj = new MyTargetClass();
myObj.DoSomethingWith(this);
}
******************************************华丽丽的分割线你懂得!
而this最常用的是如下的代码
this 关键字的另一个常见用法是限定本地类型的成员,例如:
public class MyClass
{
private int someData;
public int SomeData
{
get
{
return this.someData;
}
}
}
许多开发人员都喜欢这个语法,它可以用于任意成员类型,因为可以一眼看出引用的是成员,
而不是局部变量。