我有一個Data
類。製作無法從派生類訪問但仍然公開的方法
和DerivedClass : Data
。
該Data
有數據本身和大量的方法來處理該數據。
但是DerivedClass
必須只繼承那些方法的一部分,因爲它們中的一些可能會導致不好的結果。 (出現這種情況只DerivedClass
而不是Data
問題)
所以我想隱藏起來的一部分(從基類中的一些訪問,不打字new
隱藏每一個派生類中的方法)
這是可能的?有沒有解決方法?
我有一個Data
類。製作無法從派生類訪問但仍然公開的方法
和DerivedClass : Data
。
該Data
有數據本身和大量的方法來處理該數據。
但是DerivedClass
必須只繼承那些方法的一部分,因爲它們中的一些可能會導致不好的結果。 (出現這種情況只DerivedClass
而不是Data
問題)
所以我想隱藏起來的一部分(從基類中的一些訪問,不打字new
隱藏每一個派生類中的方法)
這是可能的?有沒有解決方法?
我認爲最好的方法是創建一個只有方法可以由派生類修改的基類。數據類將被密封並保持不變,並且此基類將由Data類組成。代碼看起來像下面的東西:
public sealed class Data
{
private object data; //actual data
private BaseDataOperations dataOperations; //This class will implement methods
public void Method1() //This method is accessible to others but can't be modified
{
// manipulate data
}
public void Method2() //This method will be polymorphically performed
{
dataOperations.Method2(data);
}
}
public class BaseDataOperations
{
public virtual void Method2(object data) //This method will be polymorphically performed
{
//manipulate data
}
}
public class DerivedDataOperations : BaseDataOperations
{
public override void Method2(object data) //This method will be polymorphically performed
{
//manipulate data
}
}
您可以使用陰影,正是實現了相同的方法(公共,返回類型,名稱,參數) 然後在派生類中該方法實現新的邏輯。
class Class1
{
public int Get()
{
return 1;
}
public Class1()
{
}
public virtual void ForBoth()
{
}
}
class class2 : Class1
{
public class2()
{
}
public override void ForBoth()
{
base.ForBoth();
}
public int Get()
{
return 2;
}
}
在我的例子中,陰影方法是Get()。 可以在波紋管 Class1的具有財產INT敏的例子更改其他成員一樣,我在轉換到Class2中的方法
class Class1
{
public int MyInt = 0;
public int Get()
{
return 1;
}
public Class1()
{
}
public virtual void ForBoth()
{
}
}
class class2 : Class1
{
public class2()
{
}
public override void ForBoth()
{
base.ForBoth();
}
public void MyInt(string s)
{
System.Windows.Forms.MessageBox.Show(s);
}
public int Get()
{
return 2;
}
}
這個,你應該考慮創建實現 那些「行爲」接口
分開。退房適配器模式 http://www.dofactory.com/Patterns/PatternAdapter.aspx
...我想了一會兒後,我很清楚答案...但也許一些開明的解決方法可能會來。 –
爲什麼你需要公開這種方法? –
因爲它們是使用'Data'類的用戶方法。沒有他們,上課幾乎是無用的。 –