我需要从类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
)不受影响。
我怎样才能达到预期的行为?
答案 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;
}
}