0

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

(DerivedObject:BaseObject,DerivedContainer:BaseContainer)

例如,使用new关键字:

基础对象:

公共 BaseContainer 容器 {get; 放;}

派生对象:

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

virtual并且override不起作用,因为您无法更改返回类型(get;失败)。 new如果我这样做不起作用((BaseObject)myDerivedObject).Container = something,因为它没有在DerivedObject.Container__set.

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

4

1 回答 1

1

你可以使用泛型。

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

class Derived : Base<DerivedContainer> { }
于 2013-07-01T04:27:19.283 回答