2014-03-30 44 views
-1

我有7類,其繼承了 「基地」 類:如何爲一個類的3個孩子實現一個非靜態方法?

  • 基地
  • 1類:基本
  • 等級2:基本
  • ...
  • Class7:基本

對於這7個類中的3個,我必須添加一個非靜態方法(完全相同的代碼),bu這種方法應該而不是對其他類是可見的,我不知道如何組織我的代碼。

有人可以幫助我嗎?

編輯: 我不能這樣做:

  • 基地
    • 與 '祕密' 的方法類:基本
    • 1類:類具有 '祕密' 方法
    • Class2:使用「祕密」方法的類
    • Class3:使用「祕密」方法的類
    • CLASS4:基本
    • Class5:基本
    • Class6的:基本
    • Class7:基本

因爲在非靜態方法中,我使用的是在1類聲明的屬性,Class2和Class3類(我無法移動它,它由Entity Framework處理)。例如:

this.var 
+1

你在浪費時,你有特殊的要求,但是卻忘了提及他們的人民的時間。你的問題太模糊了,需要一個具體的例子來解釋你正在做什麼。這個class1,class2的東西使它更加混亂。我也認爲你正在使用錯誤的術語。你的意思是財產?屬性看起來像這個'[Attribute]'並且裝飾一個類 –

+0

@ErikFunkenbusch很好的解釋,但是爲了完整性,屬性可以修飾類和/或它的成員,屬性和方法。 –

+0

是的,我很抱歉,我的意思是「財產」。 – user3477210

回答

5

做它像這樣:

  • 基地
    • 類具有 '祕密' 方法:基本
      • 的Class1:與 '祕密' 方法
      • 類2類:採用「祕密」方法的類
      • 類3:採用「祕密」方法的類
    • CLASS4:基本
    • Class5:基本
    • Class6的:基本
    • Class7:基本
+2

羽絨投票人,有什麼問題? –

+0

我無法做到這一點,我編輯我的帖子來解釋爲什麼。 – user3477210

1

有更多的方式來重用代碼不是繼承。只有當您需要「is-a」類型時才應使用繼承,而不僅僅是因爲您不需要多個代碼副本。

遏制可能是一個更好的選擇。但是,這取決於你的方法究竟做了什麼。

例如:

public class Contained { 
    public void SpecialMethod() {} 
} 

public class Class1 : Base { 
    private Contained _contained = new Contained(); 

    public override void NormalMethod() { 
     // do some work 
     _contained.SpecialMethod(); 
    } 
} 

public class Class2 : Base { 
    private Contained _contained = new Contained(); 

    public override void NormalMethod() { 
     // do some work 
     _contained.SpecialMethod(); 
    } 
} 
相關問題