2010-08-31 59 views
3

A類從B類派生。在類AI中想隱藏從B類繼承的一些屬性。因此,當創建類A的實例時,我不想公開類B的某些屬性。是否可以隱藏派生類的屬性?

Is這可能嗎?

+2

使它成爲'private'而不是'public'或'protected'嗎? – 2010-08-31 08:03:48

回答

8

不,這會挫敗繼承的目的。你的A類是B,因此它的屬性爲B

2

可以通過聲明具有相同的名稱(和new修飾符)新的陰影成員。但是這並不能真正隱藏任何東西,並且不會阻止任何人投擲回B並以這種方式訪問​​成員。

你確定在這種情況下你確實想使用繼承嗎?您可能希望當您從B派生A,你說A幾乎是一樣的Bhttp://en.wikipedia.org/wiki/Liskov_substitution_principle

2

讀了,但它有另外的特點;它是B的專業化版本。

舉個例子:a DogAnimal。在你的情況下,你試圖說Animal有鰭,但Dog還沒有;這絕對不是繼承的目的。

1

爲了實現這一點,而不是致力於使屬性保密,避免繼承並應用合成(即使用接口)。

0

你的意思是這樣的:

class A { 
    public virtual int X { 
     get { return 1; } 
    } 
} 

class B : A { 
    public sealed override int X { 
     get { return 2; } 
    } 
} 

class C : B { 
    public override int X { 
     get { return -1; } 
    } 
} 

如果是這樣,是的。 (以上提供了編譯時錯誤C)。這裏的含義是,A有一個屬性,B實現它,並希望阻止任何子類這樣做。