通常,给定A类和派生类DerivedFromA以及A的实例,有没有办法从该实例构造DerivedFromA?
例如,假设DerivedFromA只是覆盖A的一个或多个方法或属性。假设我有一些带有CreateA()方法的Container类,它返回A的实例,我要么不能,要么不能想要覆盖或以其他方式搞乱那个Container类。我想要做的是获取Container.CreateA()返回的实例,将其传递给DerivedFromA(一个instanceOfA)构造函数,并将结果对象与instanceOfA一样处理,并使用所有instanceOfA的方法,属性和数据,除了我已经覆盖的那些。
顺便说一句,有问题的语言是C#,它会产生影响。感谢。
答案 0 :(得分:2)
您必须创建一个新的DerivedFromA
实例,并使用该实例而不是原始实例。但是,如果你这样做,它将正常工作。
只需添加一个像你所示的构造函数:
public DerivedFromA(A instanceOfA)
{
// Copy members from instanceOfA into here as necessary
this.Foo = instanceOfA.Foo;
this.Bar = instanceOfA.Bar;
// Setup unique values
this.Baz = 42;
}
然后,当你打电话时,你可以这样做:
DerivedFromA instance = new DerivedFromA(container.CreateA());
答案 1 :(得分:0)
我可能会这样做一个新的虚拟方法:
public class ClassA {
public virtual string Foo { get; set };
public virtual ClassA GetAsClassA() {
return this;
}
}
public class ClassB : ClassA {
public virtual string Foo { get; set };
public override ClassA GetAsClassA() {
// Create new ClassA and copy properties as needed.
// Can use base.Foo to get base properties, as needed.
}
}
这将逻辑包装在类本身中。