2015-01-04 122 views
0

我有一個類M和許多派生類A的類型轉換部件M派生類

派生類A,B,C是明顯不同的,否則他們不已被宣佈。

M實現了一個需要知道調用類的類型的成員。

所以,今天我在M中使用一個抽象成員,並在每個dervied類中單獨覆蓋。

在L:

public abstract Do() {}; 

在一個:

public override void Do() 
{ 
    DoMore<A>(); 
} 

在B:

public override void Do() 
{ 
    DoMore<B>(); 
} 

在C:

public override void Do() 
{ 
    DoMore<C>(); 
} 

是有沒有一種方法可以在M中爲所有派生類實現Do()?喜歡的東西:

採用M:

public Do<T>() { 
    DoMore<T>(); 
} 

因爲DoMore()是在派生類鑄造這是行不通的。

+0

如果'DoMore'需要做具體的每一個派生類的東西爲什麼是不是也抽象/虛擬? –

+0

「更大」的類型不應該知道它的任何派生一次。你確定基類是你真正需要的嗎?你需要派生類型的特定成員嗎? –

+0

你可以像'void DoMore(Type t)'一樣更改'DoMore'方法嗎? – Vlad

回答

0

的情況下,您所創建的

   DoMore method in the base class and make it abstract and override 
      in the child class so that appropriate method is called 

但多多少少也將是相同的 作爲壓倒一切的待辦事項方法,你剛纔移動到父類,並使其非抽象這將是可能的。

2

如果使基類通用的,你可以把它的派生型的「知道」:

public class M<T> 
{ 
    public Do<T>() 
    { 
     DoMore<T>(); 
    } 
} 

public class A : M<A> {...} 
public class B : M<B> {...} 
public class C : M<C> {...}