2013-06-13 49 views
2

我有一个Data类。制作无法从派生类访问但仍然公开的方法

DerivedClass : Data

Data有数据本身和大量的方法来处理该数据。

但是DerivedClass必须只继承那些方法的一部分,因为它们中的一些可能会导致不好的结果。 (出现这种情况只DerivedClass而不是Data问题)

所以我想隐藏起来的一部分(从基类中的一些访问,不打字new隐藏每一个派生类中的方法)

这是可能的?有没有解决方法?

+0

...我想了一会儿后,我很清楚答案...但也许一些开明的解决方法可能会来。 –

+0

为什么你需要公开这种方法? –

+0

因为它们是使用'Data'类的用户方法。没有他们,上课几乎是无用的。 –

回答

0

我认为最好的方法是创建一个只有方法可以由派生类修改的基类。数据类将被密封并保持不变,并且此基类将由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 
    } 
} 
0

您可以使用阴影,正是实现了相同的方法(公共,返回类型,名称,参数) 然后在派生类中该方法实现新的逻辑。

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

相关问题