我想隱藏基本公共財產(數據成員)在我的派生類:如何隱藏在派生類的基類的公共財產
class Program
{
static void Main(string[] args)
{
b obj = new b();
obj.item1 = 4;// should show an error but it doent ???
}
}
class a
{
public int item1 {get; set;}
public int item2 { get; set; }
}
class b : a
{
new private int item1;
}
class c : a
{
}
我有成員作爲公衆,因爲我想要的成員要在c類中繼承,但想隱藏b類中的成員,我該怎麼做?
不要我有選擇性地繼承我想在我的基類中的變量?這就是非常糟糕的,我認爲微軟應該爲我們提供了一個選項(可能是修改)來執行此
編輯:
,我發現自己的答案(我聽到很多人講這是不可能在C#中,但你可以種做)
我,包括情況下,代碼是非常有用
class Program
{
static void Main(string[] args)
{
b obj = new b();
obj.item1 = 4; // shows an error :)
}
}
class a
{
public int item1 { get; set; }
public int item2 { get; set; }
}
class b : a
{
new public static int item1
{
get;
private set;
}
}
此代碼是否正確編譯? – vpram86 2009-09-18 11:15:10
我相信如果你告訴我們這個用例,還有一個替代解決方案。你爲什麼想這樣做? – 2009-09-18 11:21:56
你的解決方案顯然只隱藏了setter。 雖然它停止立即指派,沒有什麼可以阻止下列: ((a)中OBJ).item1 = 4; B不能說ITEM1永遠不會改變,因爲它可能的假設下進行編程。它停止了簡單的情況,但並非每個案例。更健壯的解決方案是重構繼承層次結構。 – ICR 2009-09-18 13:18:41