2016-04-06 120 views
2

我試着去作出這樣的: My model摘要方法與泛型類型

我有點困惑。我想創建一個名爲Update(T other)的函數,參數「other」類型是類類型。我認爲,在抽象類中實現一個通用接口它將起作用,但它不起作用。 :/

如何獲得具有泛型類型參數的抽象方法,並在繼承的類中指定該類型?那可能嗎?我的方法是否正確?

代碼:

public interface IUpdateable<T> 
{ 
    void Update(T pOther); 
} 

public abstract class Instruction_Template : IUpdateable<Instruction_Template> 
{ 
    public abstract void Update(??? pOther); 
} 

public class Work_Instruction_Template : Instruction_Template 
{ 
    public void Update(Work_Instruction_Template pOther) 
    { 
     //logic... 
    } 
} 

謝謝!

+4

糟糕,提供代碼示例而不是UML圖表會更好嗎? ; P –

回答

2

使用curiously recurring template pattern

abstract class Instruction_TP<T> 
    where T : Instruction_TP<T> 
{ 
    public abstract void Update(T instruction); 
} 

class Process_Instruction_TP : Instruction_TP<Process_Instruction_TP> 
{ 
    public override void Update(Process_Instruction_TP instruction) 
    { 
     throw new NotImplementedException(); 
    } 
} 

abstract class NC_Instruction_TP<T> : Instruction_TP<T> 
    where T : NC_Instruction_TP<T> 
{ } 

class Drill_Instruction_TP : NC_Instruction_TP<Drill_Instruction_TP> 
{ 
    public override void Update(Drill_Instruction_TP instruction) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

如果我使用它,我可以用foreach迭代一個集合嗎?類似於 foreach(Instruction_TP current in List ) – Maik

+0

@Maik您可以添加一個類似'IUpdateable'的接口,但不包含泛型,並將所有實例放入'List '中。 –

2

什麼問題?

public interface IstructionTP<T> 
    where T : class 
{ 
    void Update(T entity); 
} 

public class ProcessIstructionTP : IstructionTP<ProcessIstructionTP> 
{ 
    public void Update(ProcessIstructionTP entity) 
    { 
     ... 
    } 
}