今天我的大脑死了,我想不出一个干净的方法来强制编译器使用继承进行通用推理。
想象一下以下4个类
楷模
public abstract class Model
{
}
public class CodePerfModel : Model
{
}
实体
public abstract class ModelEntity<TModel> where TModel : Model
{
public TModel Model { get; set; }
}
public class CodePerfEntity : ModelEntity<CodePerfModel>
{
}
现在对我来说,从逻辑上讲,我应该理所当然地认为,当我通过继承获取继承自ModelEntity<>
(它将指定的类型TModel
)的东西时,因为任何继承自的类ModelEntity<>
都必须指定它。
反正有没有强制编译器为我解决这个问题?
例如
如果我目前想使用ModelEntity<>
,我必须为它指定一个类型。如下所示:
public class CallerClass<TEntity, TModel>
where TEntity : ModelEntity<TModel>
where TModel : Model
{
}
我怎样才能摆脱TModel
无处不在的争论?在编译时仍然可以访问 TModel 类型?例如通过基础Model
属性。
对我来说,类似于以下内容:
public class CallerClass<TEntity>
where TEntity : ModelEntity<>
{
}
会很有意义,因为当我调用它时,我应该指定的是例如
SomeCall<CodePerfEntity>();
而不是
SomeCall<CodePerfEntity, CodePerfModel>();
这是目前可能的吗?
这是否值得为 C# 6/7 提出?