2012-06-29 111 views
0

我有一個小問題。嵌套類與接口

當我開始編程我的應用程序時,我將同級別的類型分組到FirstLevel(所有類型的級別都從FirstLevel派生)。之後,我開始使用這種類型創建泛型列表,我的代碼正在使用它,沒有任何錯誤。

現在,在一段時間後,我需要在每個類中使用函數Generate,這些函數是從FirstLevel派生的,或者其父項是從FirstLevel派生的。我認爲這個界面可以是很好的解決方案,所以我開始實現接口IGenerable到每個與FirstLeve l類有共同點的類(它的派生,或者它的父類派生,或者它的父類的父類......)還將其實施到FirstLevel類。

這裏是我的問題的開始。我需要調用List<FirstLevel>中每個項目的生成函數。但是我不知道是否將在FirstLevel中實現IGenerable,或者派生類中實現IGenerable。我希望計算機能夠執行派生類中實現的調用。請告訴我它是怎麼回事。

但是,如果有將執行調用爲FirstLevel,請幫助我,並提出一些解決方案。謝謝。

+2

這樣可以更容易理解代碼示例。你能包括嗎? – l15a

+0

你想運行父母或專業班的代碼嗎? –

回答

2

而不是使用接口,您可能會更好通過添加一個虛函數生成到您的基類(FirstLevel),然後根據需要覆蓋後代中的方法。現在,當您循環訪問List並調用Generate(如果對象具有重寫的方法)時,它將執行該方法,否則將執行基礎對象中的方法。

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var objs = new List<FirstLevel> { new FirstLevel(), new SecondLevel(), new ThirdLevel(), new SecondLevel2() }; 
      objs.ForEach(o => o.Generate()); 
      Console.ReadLine(); 
     } 

    } 

    public class FirstLevel 
    { 
     public virtual void Generate() 
     { 
      Console.WriteLine("First Level Generate called."); 
     } 
    } 

    public class SecondLevel : FirstLevel 
    { 
     public override void Generate() 
     { 
      Console.WriteLine("Second Level generate called."); 
     } 
    } 

    public class SecondLevel2 : FirstLevel 
    { 

    } 
    public class ThirdLevel : SecondLevel 
    { 
     public override void Generate() 
     { 
      Console.WriteLine("Third Level genrate."); 
     } 
    } 
}