我也遇到过类似的问题,但是我发现在实际使用中使用泛型会引入不必要的冗长。
(在我的例子中,"MySpecificClass"使用一个特定的iccustom Values类型,所以T总是只有一个类型。)
我当前的"解决方案"是在基类中定义一个支持成员,然后定义"new"在派生类中转换为更具体类型的属性。
public class BaseMember { }
public class BaseOwner
{
protected BaseMember _member;
public BaseMember member {get => _member; private set => _member = value;}
}
public class DerivedMember: BaseMember { }
public class DerivedOwner : BaseOwner
{
public new DerivedMember member {get => (DerivedMember) _member; private set => _member = value;}
}
这感觉很聪明,到目前为止还没有引起任何问题。它还产生了我在编写派生这些类的高级代码方面所寻找的确切交互。
它看起来也像一个巨大的定时炸弹虽然我说不清楚。我错过了什么?
c# 9.0允许更改返回类型,使用更具体的类。所以不需要new
。参见协变返回。
要使用它,你需要在基类中声明为virtual
,然后在子类中声明为override
。