我正在尝试使用泛型类来实现通用的“可变”方法,我不知道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]的参数名称和类型,但我不知道我是否可以“在空中”修改方法声明。
非常感谢!
答案 0 :(得分:1)
您必须添加通用参数并传播它:
public abstract class TableEntity<TKey>
{
}
public class BusinessObject<TEntity, TKey>
where T : TableEntity<TKey>
{
public TEntity GetOne(TKey key)
{
// ...
}
}
答案 1 :(得分:0)
作为替代方案,您可以修改核心类/接口以接受通用参数以及其他参数。