假设我有两个类,并且都包含相同的字段
Class A
{
public string Name { get; set; }
public int Designaton { get; set; }
}
Class B
{
public string Name { get; set; }
public int Designation { get; set; }
}
我有一个接口和两个从接口继承的类
public interface IDeprt
{
object BindData();
}
和两个提取器类:
public classAItem : IDeprt
{
public object BindData()
{
return new A()
{
// mapping operation
}
}
}
public classBItem : IDeprt
{
public object BindData()
{
return new B()
{
//same mapping operation
}
}
}
我的问题,如何使用<T>
以通用方式实现这一点。 两个类都在执行相同的操作,仅返回类型更改。如果我以上述方式执行,则有很多代码重复。
使您的ITem
接口以及BindData
通用的使它们使用相同的泛型参数。
public interface IItem<T>
{
T BindData();
}
然后实现如下子类:
public class AItem : ITem<A>
{
public A BindData(){
return new A(){
// mapping operation
}
}
}
public class BItem : ITem<B>
{
public B BindData(){
return new B(){
//same mapping operation
}
}
}
编辑:随着问题的发展。
为 A 类和 B 类创建共享基类。
public abstract class CommonItem
{
public string Name { get; set; }
public int Designaton { get; set; }
}
class A : CommonItem
{
}
class B : CommonItem
{
}
然后使用接受具有new
和CommonItem
约束的泛型参数的方法创建类。
public class Binder
{
public T BindData<T>() where T: CommonItem, new()
{
return new T()
{
// you can access the properties defined in ICommonItem
}
}
}
用法:
var binder = new Binder();
var boundA = binder.BindData<A>();
var boundB = binder.BindData<B>();