泛型类型参数 C# - 如何泛型类返回类型



假设我有两个类,并且都包含相同的字段

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 
{   
}

然后使用接受具有newCommonItem约束的泛型参数的方法创建类。

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>();

最新更新