2013-06-13 83 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

相關問題