有關使用類參數鏈接構造函數的問題。將類作爲參數鏈接的構造函數
我有一個帶有列表框的窗體。此表單用於調試目的。 當我將所有對象(Class)實例化時,我希望他們在此列表框中寫入發生的事情。 因此,我將調試類作爲參數傳遞給其他類,以便每個人(類)現在誰是此列表框。 我使用委託回調將文本從每個類寫入到列表框調試。問題是別人想要調用我的類(不是調試器),他們想給我一個字符串。 所以我試圖使用鏈式構造函數,以便當我instanciate我的類與參數中的調試器類,當他們調用我的類他們做一個字符串作爲參數。
代碼有:
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;
}
}
調試器:
public partial class Debugger : Form
{
public Debugger()
{
InitializeComponent();
}
public void writeStr(string valuestr)
{
lb_debuglist.Items.Add(valuestr);
}
}
OtherClass共享調試列表框:
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.");
}
}
}
對此有何評論?或者我可以將問題解答爲答案?
非常感謝你的codeworker!
而且隨着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):this(valuereceived,ClassToPass missingsomething)'無效 - 您無法定義這樣的參數。 我不知道你在做什麼。 –