Вопрос о конструкторе цепочки с параметром класса.Цепь конструктора с классом как параметр
У меня есть форма со списком. Эта форма предназначена для отладки. Когда я внедряю весь свой объект (класс), я хочу, чтобы они записали в этом списке окно, что произошло. Итак, я передаю класс debug как параметр другому классу, чтобы теперь все (класс), кто является этим списком. Я передаю текст с обратным вызовом делегата для записи из каждого класса в debug. Проблема в том, что другие хотят вызывать мои классы (а не отладчик), и они хотят отправить мне строку. Итак, я пытаюсь использовать цепной конструктор, чтобы при инициализации моих классов был включен класс отладчика в параметре, и когда они вызывали мои классы, они делают со строкой в качестве параметра.
Код есть:
public delegate void DEL_SetStringValCbk(string value);
public partial class Form1 : Form
{
public Debugger DebugConsole;
internal OtherClass AnotherClass;
internal OtherClass AnotherClassForString;
public DEL_SetStringValCbk SetStringValCbk;
private string MyTextToPass;
public Form1()
{
InitializeComponent();
MyTextToPass = "Hello world";
DebugConsole = new Debugger();
DebugConsole.Show();
SetStringValCbk = new DEL_SetStringValCbk(DebugConsole.writeStr);
SetStringValCbk("Object debugger done");
AnotherClass = new OtherClass(DebugConsole);
AnotherClassForString = new OtherClass(MyTextToPass);
textBox1.Text = AnotherClassForString.TextReceived;
textBox2.Text = AnotherClass.TextReceived;
}
}
Debugger:
public partial class Debugger : Form
{
public Debugger()
{
InitializeComponent();
}
public void writeStr(string valuestr)
{
lb_debuglist.Items.Add(valuestr);
}
}
OtherClass обмена отладчик ListBox:
class OtherClass
{
public string TextReceived = "none";
public DEL_SetStringValCbk writeToDebug;
Debugger DebuggerConsole;
public OtherClass()//default ctor
{}
public OtherClass(string valuereceived): this(valuereceived, null)//only int ctor
{}
public OtherClass(Debugger _Debugger) : this("null", _Debugger) { }
public OtherClass(string valuereceived, Debugger _Debugger)//master ctor
: this()
{
TextReceived = valuereceived;
if (_Debugger != null)
{
DebuggerConsole = _Debugger;
writeToDebug = new DEL_SetStringValCbk(DebuggerConsole.writeStr);
writeToDebug("class constructed init OK.");
}
}
}
Любые замечания по этому поводу? Или я могу поставить вопрос как ответ?
Огромное спасибо вам, кодоводам!
И с optionnal параметра должно быть:
class OtherClass
{
public string TextReceived = "none";
public DEL_SetStringValCbk writeToDebug;
Debugger DebuggerConsole;
public OtherClass()//default ctor
{}
public OtherClass(Debugger _Debugger = null,string valuereceived = "")//master ctor with default param
: this()
{
TextReceived = valuereceived;
if (_Debugger != null)
{
DebuggerConsole = _Debugger;
writeToDebug = new DEL_SetStringValCbk(DebuggerConsole.writeStr);
writeToDebug("class constructed init OK.");
}
}
}
Это работает, если мы присваиваем имя в вызове, как (в Form1):
AnotherClass = new OtherClass(_Debugger:DebugConsole);
AnotherClassForString = new OtherClass(valuereceived:MyTextToPass);
Почему мы должны присвоить эти? некоторая помощь?
В этом проблема. От https://msdn.microsoft.com/en-us//library/dd264739.aspx: «Если вызывающий объект предоставляет аргумент для любой последовательности дополнительных параметров, он должен предоставлять аргументы для всех предыдущих необязательных параметров». Поэтому, если я опускаю первый вариант, он не будет работать. Мы должны поставить имя: так что он вынужден получить хороший.
'OtherClass' не имеет конструктора, который ожидает только параметр ClassToPass в качестве параметра. Что вы ожидаете? – haim770
У него даже нет конструктора, кроме 'Form1'. Как должен« Form1 »связываться с« ClassToPass »? У меня такое чувство, что вы пытаетесь создать какой-то объект Бога, который может обрабатывать все типы разных типов. Это действительно плохая идея и только показывает, что вы слишком много делаете в одном классе. – HimBromBeere
Ваш конструктор 'OtherClass (int valuereceived): этот (valuereceived, ClassToPass missingsomething)' недействителен - вы не можете определить такой параметр. Я не знаю, что вы пытаетесь сделать. –