我有一个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'类的用户方法。没有他们,上课几乎是无用的。 –