2009-04-20 145 views
1

我最近看到的是看起来像这样一个C#构造函数...C#构造函数

public Class foo 
{ 
    public foo() : this(new bar()) 
    {} 
} 

任何人可以帮我解读? bar()适合在哪里?
如果你可以通过在适当位置插入bar()来帮助我完成课程,以便我可以编译/调试并查看整个图片。

在此先感谢。

尼科斯

回答

7

Foo类应包含另一个构造,采用一个酒吧对象作为参数。

public class foo 
{ 
    public foo() 
     : this(new bar()) 
    { } 
    public foo(bar b) 
    { 
    } 
} 
public class bar 
{ 
} 
1

会有阶级富第二构造函数签名这样

public foo(bar Bar) 
{ 
    ... do something with bar here; 
} 
1

这是一种常见的技术,以确保所有建设者经过一个单点,所以你只需要改变这一点(也可能有其他用途,但我不知道他们的)。

我已经看到了它在使用默认参数,如事情:

class Rational { 
    private: 
     long numerator; 
     long denominator; 
    public: 
     void Rational (long n, long d) { 
      numerator = n; 
      denominator = d; 
     } 
     void Rational (long n): Rational (n,1) {} 
     void Rational (void): Rational (0,1) {} 
     void Rational (String s): Rational (atoi(s),1) {} 
} 

熊的语法,我没有一个编译器随时进入这里,但基本意图是集中尽可能多代码尽可能在第一个构造函数中。

所以,如果,例如,您可以添加一个检查,以确保分母大于零或者分子和分母使用的是最大公约数的方法降低,它只有有在代码中的一个点发生。

+0

有趣。将代码放入空括号中会发生什么情况? – Svante 2009-04-20 11:12:32