作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
C# 4.0 .NET 4.5 银光 5我找不到解决方案似乎很奇怪,所以需要一些帮助。
我有基类 Base 和派生类 Child : Base。我还有一个帮助器类,它具有泛型类型来完成特定的工作,一个 EF 实体帮助器,其中 T:EntityObject。
child 使用特定实体 MyEntity 执行特定工作:EntityObject。
所以我尝试了:
public class Base
{
protected Helper<EntityObject> helper;
}
public class Child : Base
{
public Child()
{
helper = new Helper<MyEntity>();
}
}
我希望更多的派生类必须了解更具体的泛型参数,我认为这就是协变的原因……但这不起作用……
像这样设计类的“正确”方法是什么?
编辑:抱歉,我没有 100% 清楚为什么我不能实现我需要的。
一个。使用通用 Base 的解决方案不起作用,因为 Base 的用户不知道 T 类型。想象一下:
public class User
{
private Base<T> base; // this will not compile.
public User(TypeEnum t)
{
if(t == TypeEnum.MyEntity) base = new Child();
...
b。 Interface 的解决方案不起作用,因为 helper 在任何地方都使用 T(这是它的目的,对吗?)。想象一下它有方法
public IEnumerable<T> Process(IEnumerable<T> items) { return items; }
如何在对T一无所知的界面中调出它
最佳答案
我认为这就是您所追求的:
public class Base<T> where T : EntityObject
{
protected Helper<T> helper;
}
public class Child : Base<MyEntity>
{
public Child()
{
helper = new Helper<MyEntity>();
}
}
编辑(响应您的编辑):您可以添加一个Base
,像这样使用:
public class Base
{
// put anything here that doesn't rely on the type of T
// if you need things here that would rely on T, use EntityObject and have
// your subclasses provide new implementations using the more specific type
}
public class Base<T> : Base where T : EntityObject
{
protected Helper<T> helper;
}
public class Child : Base<MyEntity>
{
public Child()
{
helper = new Helper<MyEntity>();
}
}
public class User
{
private Base myBase;
public User(TypeEnum t)
{
if(t == TypeEnum.MyEntity) myBase = new Child();
...
关于c# - C#泛型类中的协变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16317541/
COW 不是奶牛,是 Copy-On-Write 的缩写,这是一种是复制但也不完全是复制的技术。 一般来说复制就是创建出完全相同的两份,两份是独立的: 但是,有的时候复制这件事没多大必要
我是一名优秀的程序员,十分优秀!