2011-02-12 39 views
6

只是爲了澄清,是否真的強制要求所有的子類的成員都在它上面的抽象類中聲明?是否有可能在子類上定義成員而不在抽象父類上定義它? C#

有可能是這樣的:

public abstract class MyParent 
{ 
    public int x { get; set; } 
} 
public class MyChild : MyParent 
{ 
    public int x { get; set; } 
    public string MyName { get; private set; } 
} 

這只是一個例子......在這種情況下,物業MyName未在父類中定義的,但它是在子類...可能嗎?

在此先感謝!

回答

4

是的,你可以在子類中聲明額外的屬性和方法。

但是,如果使用聲明爲祖先類型的變量,則只能通過該變量訪問在祖先類型中定義的成員。獲得子類的特殊東西的唯一方法是將類型轉換爲子類型。

另一方面:子類應該不是重複在祖先做出的聲明。這裏的int x屬性會導致問題,因爲會有兩個不同的x屬性運行。

的具體(非抽象)子類需要倍率在抽象祖先聲明的任何虛擬方法或屬性。虛擬和覆蓋都需要聲明中的特定關鍵字。

2

是的,可以在子類中創建不在父類中的新成員。這是兒童課程的重點。子類應該通過添加新成員或修改現有成員的行爲來「擴展」父類

但是,您不需要在子類中重新創建父類成員。子類自動獲取父類中的所有成員。

你給出的代碼是一個合法的C#程序,這意味着你的意圖是爲子類創建一個不同的int x。這通常不是這種情況,Microsoft C#編譯器會給你一個警告。

+0

我很困惑這個答案。 – spender 2011-02-12 16:55:22

2

是的,當然這是非常正常的。你唯一不能做的就是訪問MyName屬性,如果你正在通過父項。在這種情況下,您只需訪問MyParent的共同點即可。