Мне нужно получить класс 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
как я локальной переменной в конструктор изменяется по мере необходимости (б/с в случае улова не введен), но базовая часть DerivedTool
(т.е. Tool
) не является пострадавшие. Как я могу достичь желаемого поведения?
Мы не можем знать, как 'CogToolBlock' класс работает, лучше, чем вы, если мы не знаем об этом. – Jodrell
Почему вы не создаете другой класс, который принимает экземпляр инструмента в конструкторе и реализует интерфейс, перенаправляя действия на предоставленный экземпляр инструмента? Вам нужно использовать новый класс в качестве замены готового инструмента, например. передать его методам, которые берут Инструмент в качестве параметра? – Markus
@Matz: вопрос не совсем ясен ... можете ли вы объяснить немного подробно и четкий, чтобы мы могли помочь вам с идеальным решением. –