从派生类构造函数初始化没有复制构造函数的基类

时间:2014-01-10 12:42:35

标签: c# inheritance constructor

我需要从类Tool派生,因为我必须使用另一个接口IToolWrapper来装饰该类。不幸的是,Tool类没有提供复制构造函数,这就是为什么我认为无法编写DerivedTool的构造函数

public DerivedTool(String filename) : base(createToolFromFile(filename)) {
    //...
}

虽然我很确定它无效但我尝试了以下内容:

public sealed class DerivedTool : Tool, IToolWrapper {

    static bool createToolFromFile(ref Tool tool, String filename) {
        tool.Dispose();
        tool = null;
        try {
            tool = LoadFromFile(filename) as Tool;
        } catch ( Exception ) {
            return false;
        }
        return true;
    }

    public DerivedTool(String filename) : base() {
        Tool tool = (Tool)this;
        if ( !createToolBlockFromFile(ref tool, filename) ) throw new Exception("Tool could not be loaded!");
    }

}

在调试器中,我看到tool因为构造函数的局部变量被修改为需要(b / c未输入catch案例),但是DerivedTool的基本部分(即Tool)不受影响。 我怎样才能达到预期的行为?

1 个答案:

答案 0 :(得分:3)

使用私有变量和隐式/显式运算符的组合,如下所示:

public sealed class DerivedTool : IToolWrapper {
    private Tool _tool;

    public DerivedTool(String filename) : base() {
        _tool = LoadFromFile(filename) as Tool;
    }

    public static implicit operator Tool(DerivedTool dt)
    {
        return dt._tool;
    }
}