1 隱藏基類的方法
當基類繼承一個(非抽象的)成員時,也就繼承了其實現代碼。如果繼承的成員是虛擬的,就可以用override關鍵字重寫這段實現代碼。無論繼承的成員是否為虛擬,都可以隱藏這些代碼。
使用下面的代碼就可以隱藏:
public class MyBaseClass
{
public void DoSomething()
{
//Base implementation.
}
public class MyDerivedClass : MyClass
{
public void DoSomething()
{
//Derived class implementation, hide base implementation.
}
}
}
盡管這段代碼可以正常運行,三十會產生一個警告,說明隱藏了一個基類成員。如果是無意間隱藏了一個需要使用的成員,此時就可以改正錯誤。如果確實要隱藏該成員,就可以使用new關鍵字顯式的表明意圖:
public class MyDerivedClass : MyBaseClass
{
new public void DoSomething()
{
//Derived class implementation,hide base implementation.
}
}
其工作方式是完全相同的,但是不會出現警告。此時應該注意隱藏基類成員和重寫他們的區別。考慮下面的代碼:
public class MyBaseClass
{
public vritual void DoSometing()
{
Console.WriteLine("Base imp");
}
}
public class MyDerivedClass : MyBaseClass
{
public override void DoSomething()
{
Console.WriteLine("Derived imp");
}
}
實現如下:
MyDerivedClass myObj = new MyDerivedClass();
MyBaseClass myBaseObj;
myBaseObj = myObj;
myBaseObj.DoSomething();
輸出結果:
Derived imp
2 this關鍵字
與base關鍵字一樣,this也可以用在類成員的內部,且該關鍵字也引用對象實例。只是this引用的是當前的對象實例(即不在靜態成員中使用this關鍵字,因為靜態成員不是對象實例的一部分)。
this關機那字最常用的功能就是把當前對象實例的引用傳遞給一個方法。
this關鍵字的另一個常見的用法就是限定本地類型的成員,例如:
public class MyClass
{
private int someData;
public int SomeData
{
get
{
return this.someData;
}
}
}