我有一个关于下列两个构造函数这是一个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