创建基类中不存在的构造函数

时间:2015-08-31 13:50:10

标签: c# inheritance

我有一个类,希望创建IWorkspace

public class MyClass {
    protected IWorkspace workspace;
    public MyClass(IWorkspace w) {
        this.workspace = w;
    }
}

和派生类Derived。在这个派生类中,我有一个copy-constrcutor,它应该基于Derived的实例创建MyClass的实例。

public class Derived : MyClass{
    public Derived(MyClass m) : base(m.workspace) { }
}

上面的编译会出现以下错误:

  

无法通过“MyClass”类型的限定符访问受保护的成员MyClass.workspace';限定符必须是'Derived'类型(或从中派生出来)

所以我想要实现的是将基类成员复制到派生的成员并创建后者的新实例。我在派生类中不使用IWorkspace构造函数的原因是我无法访问客户端代码中的这样的工作区,只能访问要复制的MyClass实例

1 个答案:

答案 0 :(得分:1)

由于您无法访问MyClass来源且IWorkspace不可用,您可以做的最好的事情是封装MyClass而不是派生它,并让外部人员提供依赖项:

public class MyClassWrapper
{
    private readonly MyClass myClass;
    public MyClassWrapper(MyClass myClass)
    {
        this.myClass = myClass;
    }

    // Wrap any methods you depend on here
}

如果push推进而你别无选择,你可以使用反射从Workspace获取MyClass实例,但那将是一个丑陋的黑客。