通过新的关键字完整性检查更具体 属性 类型

More specific property type through new keyword sanity check

我有一个与 this user 类似的问题,但是我发现在实际使用中使用泛型会引入不必要的冗长。

(在我的示例中,“MySpecificClass”使用一种特定的 ICustom 值类型,因此 T 始终只是一种类型。)

我目前的“解决方案”是在基础 class 中定义一个支持成员,然后在派生的 class 中定义转换为更具体类型的“新”属性.

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;}
}

这个感觉很巧妙,目前还没出现什么问题。在编写派生这些 classes.

的更高级别代码方面,它还产生了我正在寻找的确切交互

它看起来也像一个巨大的定时炸弹,虽然我不能指手画脚。我错过了什么?

C# 9.0 允许更改 return 类型,使用更具体的 class。所以你不需要new。参见 Covariant returns

要使用它,您需要在基础 class 中将其声明为 virtual,然后在子项中将其声明为 override