并行继承

本文关键字:继承 并行 | 更新日期: 2023-09-27 18:20:26

我有对象BaseObject和DerivedObject。然后我想给BaseObject一个BaseContainer,并给DerivedObject一个DerivedContainer。

(派生对象:基本对象,派生容器:基本容器)

例如,使用new关键字:

基本对象:

公共BaseContainer容器{get;set;}

衍生对象:

public new DerivedContainer Container
{ 
  get { return (DerivedContainer)base.Container; }
  set { base.Container = value;
        //Some extra things that MUST be called
      }
}

virtualoverride不起作用,因为您无法更改返回类型(get;失败)。如果我使用((BaseObject)myDerivedObject).Container = somethingnew就不起作用,因为它没有调用DerivedObject.Container__set中的额外代码(注释部分)。

我知道我可以只创建属性get-,使用new,并添加一个虚拟setter方法(返回类型无论如何都是void,所以我可以覆盖它),但我想知道是否有任何方法可以绕过它。

并行继承

您可以使用泛型。

class Base<TContainer> where TContainer : Container
{
    TContainer Container { get; set; }
}
class Derived : Base<DerivedContainer> { }