W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
基類和子類可以定義相同的成員。例如:
public class A {
public int Counter = 1;
}
public class B : A {
public int Counter = 2;
}
類B中的計(jì)數(shù)器字段被稱為隱藏類A中的計(jì)數(shù)器字段。
要有意隱藏成員,在這種情況下,您可以將新修飾符應(yīng)用于子類中的成員。
new
修飾符沒有什么比壓制編譯器警告,否則會(huì)導(dǎo)致:
public class A {
public int Counter = 1;
}
public class B : A {
public new int Counter = 2;
}
new
修飾符告訴編譯器重復(fù)的成員不是意外。
public class BaseClass {
public virtual void Foo() { Console.WriteLine ("BaseClass.Foo"); }
}
public class Overrider : BaseClass {
public override void Foo() { Console.WriteLine ("Overrider.Foo"); }
}
public class Hider : BaseClass {
public new void Foo() { Console.WriteLine ("Hider.Foo"); }
}
Overrider和Hider之間的行為差??異在下面的代碼中演示:
Overrider over = new Overrider();
BaseClass b1 = over;
over.Foo(); // Overrider.Foo
b1.Foo(); // Overrider.Foo
Hider h = new Hider();
BaseClass b2 = h;
h.Foo(); // Hider.Foo
b2.Foo(); // BaseClass.Foo
被覆蓋的功能成員可以用封裝的關(guān)鍵字來(lái)封裝其實(shí)現(xiàn),以防止被覆蓋。
public sealed override decimal FinalPrice {
get {
return Price;
}
}
你還可以封裝類本身,隱式地封裝所有的虛函數(shù),通過應(yīng)用封裝修飾符到類本身。
base關(guān)鍵字與this關(guān)鍵字類似。
它有兩個(gè)基本用途:
public class DiscountProduct : Item {
...
public override decimal FinalPrice {
get {
return base.FinalPrice + Price;
}
}
}
使用base關(guān)鍵字,我們無(wú)條件地訪問Item的FinalPrice屬性。
子類必須聲明自己的構(gòu)造函數(shù)。
基類的構(gòu)造函數(shù)可以被派生類訪問,但不會(huì)自動(dòng)繼承。
例如,如果我們定義基本類和子類如下:
public class Baseclass {
public int X;
public Baseclass () { }
public Baseclass (int x) { this.X = x; }
}
public class Subclass : Baseclass { }
以下是非法的:
Subclass s = new Subclass (123);
子類必須重新定義它想要公開的任何構(gòu)造函數(shù)。
通過這樣做,它可以使用base關(guān)鍵字調(diào)用任何基類的構(gòu)造函數(shù):
public class Subclass : Baseclass {
public Subclass (int x) : base (x) { }
}
base關(guān)鍵字的工作原理類似于this關(guān)鍵字,除了它調(diào)用基類中的構(gòu)造函數(shù)。
如果子類中的構(gòu)造函數(shù)忽略了base關(guān)鍵字,則基類型的無(wú)參構(gòu)造器被隱式調(diào)用:
public class BaseClass { public int X; public BaseClass() { X = 1; } } public class Subclass : BaseClass { public Subclass() { Console.WriteLine (X); } // 1 }
如果基類沒有可訪問的無(wú)參數(shù)構(gòu)造函數(shù),則子類必須在其構(gòu)造函數(shù)中使用base關(guān)鍵字。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: