我有一Data
堂课。
和一个DerivedClass : Data
。
Data
拥有数据本身和许多处理该数据的方法。
但是DerivedClass
必须只继承这些方法的一部分,因为其中一些可能会导致不好的结果。(仅发生于DerivedClass
但未发生的问题Data
)
所以我希望隐藏其中的一部分(来自基类中的某个访问器,而不是键入new
隐藏每个派生类的方法)
那可能吗?有解决方法吗?
我有一Data
堂课。
和一个DerivedClass : Data
。
Data
拥有数据本身和许多处理该数据的方法。
但是DerivedClass
必须只继承这些方法的一部分,因为其中一些可能会导致不好的结果。(仅发生于DerivedClass
但未发生的问题Data
)
所以我希望隐藏其中的一部分(来自基类中的某个访问器,而不是键入new
隐藏每个派生类的方法)
那可能吗?有解决方法吗?
我认为最好的方法是创建一个基类,它只有可以被派生类修改的方法。数据类将被密封并保持不变,该基类将由数据类组成。代码如下所示:
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
}
}
您可以使用Shadowing,完全实现相同的方法(公共,返回类型,名称,参数)然后在该方法的派生类中实现您的新逻辑。
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 MyInt,并且我在 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