控制类的实例

时间:2013-05-16 14:00:12

标签: c# constructor

我已经实现了如下课程:

public class Person
{
    public int d, e, f;
    public Person()
    {
    }

    public Person(int a)
    {
    }

    public Person(int a, int b)
    {
        new Person(40, 6, 8);
    }

    public Person(int a, int b, int c)
    {
        d = a; e = b; f = c;
    }
}   

public  class Program
{
    static void Main(string[] args)
    {
        Person P = new Person(100, 200);

        Console.WriteLine("{0},{1},{2}", P.d, P.e, P.f);// it prints 0,0,0
    }
}

现在如果我用两个参数创建Person类的实例,我无法设置d,e,f的值,这是因为在第三个构造函数中,Person的一个新对象被一起声明。

所以前一个对象对这个新对象一无所知。

有什么方法可以抓住这个新对象并从那里为d,e,f赋值?

4 个答案:

答案 0 :(得分:7)

我认为你实际上试图将构造函数链接在一起,以便一个构造函数将参数传递给另一个:

public Person(int a, int b) : this(40, 6, 8)
{
}

奇怪的是,你忽略了ab,但通常你只是默认一个值,例如

public Person(int a, int b) : this(a, b, 8)
{
}

有关详细信息,请参阅my article on constructor chaining

答案 1 :(得分:3)

    public Person()
       : this(0,0,0)
    {
    }
    public Person(int a)
       : this(a,0,0)
    {
    }
    public Person(int a, int b)
       : this(a,b,0)
    {
    }
    public Person(int a, int b, int c)
    {
        d = a; e = b; f = c;
    }

答案 2 :(得分:1)

int的默认值为0.使用int?并测试它是否有值。

e.g。

var d = P.d.HasValue ? P.d : "";
var e = P.e.HasValue ? P.e : "";
var f = P.f.HasValue ? P.f : "";
Console.WriteLine("{0},{1},{2}", d, e, f);

答案 3 :(得分:1)

你可以写这个

    public Person(int a, int b)
        : this(40, 6, 8)
    {
    }

调用另一个构造函数。