天天看點

隐藏基類的了解

在派生類中繼承基類的時候,也就繼承基類的實作代碼,是以在派生類中可以把有些方法隐藏掉(或者說可以直接使用)例如下面的隐藏,(為什麼隐藏給的原因的是代碼不像預期那樣工作了)

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;

}

}

}

許多開發人員都喜歡這個文法,它可以用于任意成員類型,因為可以一眼看出引用的是成員,

而不是局部變量。

轉載于:https://www.cnblogs.com/mamiyiya777/p/5826322.html