泛型类中的C#-特定类型方法声明
我正在尝试使用泛型类实现一个通用的“可变”方法,我不知道C#能否实现这一点。我将解释这种情况:我有一个类,它表示数据库中的一个实体,其属性用属性[PrimaryKey]和[Field]标记。例如:泛型类中的C#-特定类型方法声明,c#,generics,methods,C#,Generics,Methods,我正在尝试使用泛型类实现一个通用的“可变”方法,我不知道C#能否实现这一点。我将解释这种情况:我有一个类,它表示数据库中的一个实体,其属性用属性[PrimaryKey]和[Field]标记。例如: public class Car :TableEntity { [Field] [PrimaryKey] public string RegNumber{get;set;} [Field] pub
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
}
有没有办法或解决办法来实现这一点?我知道使用System.Reflection可以提取标记为[PrimaryKey]的参数名和类型,但我不知道是否可以修改“on the air”的方法声明
多谢各位 您必须添加一个通用参数并传播它:
public abstract class TableEntity<TKey>
{
}
public class BusinessObject<TEntity, TKey>
where T : TableEntity<TKey>
{
public TEntity GetOne(TKey key)
{
// ...
}
}
公共抽象类TableEntity
{
}
公共类BusinessObject
其中T:TableEntity
{
公共TEntity GetOne(TKey)
{
// ...
}
}
C#从CLR的角度来看是静态类型语言,因此它肯定不允许动态更改,但如果您从.Net4.0开始接触DLR,您必须牺牲intellisense奢华
作为替代方案,您可以修改核心类/接口以接受泛型参数以及其他参数
BO.GetOne(string RegNumber);
public abstract class TableEntity<TKey>
{
}
public class BusinessObject<TEntity, TKey>
where T : TableEntity<TKey>
{
public TEntity GetOne(TKey key)
{
// ...
}
}