C# - 泛型类中的特定类型方法声明

时间:2014-10-14 18:25:00

标签: c# generics methods

我正在尝试使用泛型类来实现通用的“可变”方法,我不知道C#是否可以实现这一点。我将解释这种情况:我有一个表示数据库中实体的类,其属性用属性[PrimaryKey]和[Field]标记。例如:

    public class Car :TableEntity
    {
         [Field]
         [PrimaryKey]
         public string RegNumber{get;set;}
         [Field]
         public string Color{get;set;}
    }

我尝试实现的是使用TableEntity类实例化泛型类,.GetOne()方法自动将其参数更改为主键的参数,但我无法找到一种优雅的方法它

例如,我有:

public class BusinessObject<T> where T:TableEntity
{
public T GetOne(); //this is the method to modify depending on which type is T
}

如果我这样做

BusinessObject<Car> BO = new BusinessObject<Car>();

我应该在Intellisense中看到:

BO.GetOne(string RegNumber);

有没有办法或解决方法来实现这一目标?我知道使用System.Reflection我可以提取标记为[PrimaryKey]的参数名称和类型,但我不知道我是否可以“在空中”修改方法声明。

非常感谢!

2 个答案:

答案 0 :(得分:1)

您必须添加通用参数并传播它:

public abstract class TableEntity<TKey>
{
}

public class BusinessObject<TEntity, TKey>
    where T : TableEntity<TKey>
{
    public TEntity GetOne(TKey key)
    {
        // ...
    }
}

答案 1 :(得分:0)

从CLR的角度来看,C#是静态类型的语言,因此肯定它不允许进行实时更改,但是如果你从.Net4.0开始接触DLR,你就必须牺牲智能感知。

作为替代方案,您可以修改核心类/接口以接受通用参数以及其他参数。