C# 在不复制派生类构造函数的情况下初始化基类
我需要从类C# 在不复制派生类构造函数的情况下初始化基类,c#,inheritance,constructor,C#,Inheritance,Constructor,我需要从类工具派生,因为我必须用另一个接口IToolWrapper装饰该类。不幸的是,Tool类没有提供一个复制构造函数,这就是为什么我认为不能像这样编写DerivedTool的构造函数 public DerivedTool(String filename) : base(createToolFromFile(filename)) { //... } 虽然我很确定它不会起作用,但我尝试了以下方法: public sealed class DerivedTool : Tool, IToo
工具
派生,因为我必须用另一个接口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
as I局部变量根据需要进行了修改(b/c未输入catch case),但DerivedTool
的基本部分(即tool
)不受影响。
如何实现所需的行为?使用私有变量和隐式/显式运算符的组合,如下所示:
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;
}
}
使用私有变量和隐式/显式运算符的组合,如下所示:
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;
}
}
使用私有变量和隐式/显式运算符的组合,如下所示:
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;
}
}
使用私有变量和隐式/显式运算符的组合,如下所示:
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;
}
}
我们无法比您更好地了解
CogToolBlock
类的工作原理,除非我们对它有更多了解。为什么不创建另一个类,在构造函数中获取工具实例,并通过将操作转发到提供的工具实例来实现接口?您是否需要使用新类作为开箱即用工具的替代品,例如,将其交给以工具为参数的方法?@Matz:问题并不十分清楚。。。请您详细解释一下,以便我们能为您提供完美的解决方案。我的意图是(i)向工具添加IToolWrapper
方法,以及(ii)同时能够使用DerivedTool
代替工具。由于工具
中缺少复制构造函数,直接继承似乎不可能。然而,Farzan的解决方案是有效的。我们无法比您更好地了解CogToolBlock
类的工作原理,除非我们对它有更多的了解。您为什么不创建另一个类,在构造函数中获取一个工具实例,并通过将操作转发到提供的工具实例来实现接口?您是否需要使用新类作为开箱即用工具的替代品,例如,将其交给以工具为参数的方法?@Matz:问题并不十分清楚。。。请您详细解释一下,以便我们能为您提供完美的解决方案。我的意图是(i)向工具添加IToolWrapper
方法,以及(ii)同时能够使用DerivedTool
代替工具。由于工具
中缺少复制构造函数,直接继承似乎不可能。然而,Farzan的解决方案是有效的。我们无法比您更好地了解CogToolBlock
类的工作原理,除非我们对它有更多的了解。您为什么不创建另一个类,在构造函数中获取一个工具实例,并通过将操作转发到提供的工具实例来实现接口?您是否需要使用新类作为开箱即用工具的替代品,例如,将其交给以工具为参数的方法?@Matz:问题并不十分清楚。。。请您详细解释一下,以便我们能为您提供完美的解决方案。我的意图是(i)向工具添加IToolWrapper
方法,以及(ii)同时能够使用DerivedTool
代替工具。由于工具
中缺少复制构造函数,直接继承似乎不可能。然而,Farzan的解决方案是有效的。我们无法比您更好地了解CogToolBlock
类的工作原理,除非我们对它有更多的了解。您为什么不创建另一个类,在构造函数中获取一个工具实例,并通过将操作转发到提供的工具实例来实现接口?您是否需要使用新类作为开箱即用工具的替代品,例如,将其交给以工具为参数的方法?@Matz:问题并不十分清楚。。。请您详细解释一下,以便我们能为您提供完美的解决方案。我的意图是(i)向工具添加IToolWrapper
方法,以及(ii)同时能够使用DerivedTool
代替工具。由于工具
中缺少复制构造函数,直接继承似乎不可能。然而,法赞的解决方案是可行的。这听起来很合理,在我的案例中也有效。谢谢。对我来说,这听起来很合理而且有效。谢谢。对我来说,这听起来很合理而且有效。谢谢。对我来说,这听起来很合理而且有效。谢谢