我有一個關於下列兩個構造函數這是一個Graph class的兩個部分,我在試圖從Java到港問題:在C#中,我如何正確地重載這個構造函數?
public Graph(int V)
{
this.m_V = V; this.m_E = 0;
adj = new Bag<int>[V];
for (int v = 0; v < V; v++)
adj[v] = new Bag<int>();
}
public Graph(TextReader inpt) : this(int.Parse (inpt.ReadLine()))
{
//int V = int.Parse (inpt.ReadLine());
int E = int.Parse (inpt.ReadLine());
//this(V);
for (int i = 0; i < E; i++)
{ // Add an edge.
string[] inputs = inpt.ReadLine().Split (' ');
int v = int.Parse (inputs [0]);
int w = int.Parse (inputs [1]);
addEdge(v, w);
}
}
正如經上所記,並愉快地它不漂亮,第二個構造會用第一個參數V調用第一個參數,這是它應該是的。
我的問題是,如果V是輸入序列中的第二個整數(這意味着我必須調用ReadLine()兩次)會發生什麼情況,以及在這種情況下類似的構造函數鏈調用如何看?而且,如果不將某些邏輯導出到另一種方法,甚至可能鏈接?
編輯 的主要問題,我想我意識到這一點,因爲這討論是怎麼回事,是關於構造函數的C#與java的一個靈活性。例如,我可以在撥打ReadLine()
兩次後在java中調用this(v)
,但是如何在C#中實現相同?
在構造函數中調用'ReadLine'似乎是一個非常糟糕的主意。 –
同意,但我只是想知道如何在註釋掉的javaish代碼之間轉換爲C#。 – rivanov
'沒有將某些邏輯導出到另一個方法?'聽起來像你已經知道*完全*如何做到這一點。將它解壓縮成一種方法。 Bam,完成了。或者你可能不會殘忍,根本就不這樣做。就個人而言,我會建議一個靜態工廠方法通過構造函數的情況下。 – Servy