【发布时间】:2015-04-28 22:26:45
【问题描述】:
今天我的大脑死机了,我想不出一个干净的方法来强制编译器使用继承进行泛型推理。
想象以下 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 提出吗?
【问题讨论】:
-
"现在对我来说,逻辑上我应该理所当然地认为,当我通过继承从 ModelEntity 继承某些东西时(它将指定 TModel 的类型),因为任何继承自 ModelEntity 的类将不得不指定它。”句子不解析。
-
@spender 我来自英国(或至少从 5 岁开始)。 TBH 我不觉得这个词有冒犯性,但这可能只是因为我有一群朋友。但我可以看到你来自哪里,所以我改变了它。
-
@MichalCiechan 我也是,是的,我也有不好的陪伴;)但some people 确实对此感到不安。
-
@spender 哈哈@链接哈哈
标签: c# generics types compilation open-generics