2016-04-06 79 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) 
    { 
     ... 
    } 
}