1

我已经实现了一个类如下:

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

4 回答 4

7

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

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

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

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

有关更多详细信息,请参阅我关于构造函数链接的文章。

于 2013-05-16T14:02:42.810 回答
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;
    }
于 2013-05-16T14:03:16.000 回答
1

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

例如

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);
于 2013-05-16T14:02:46.170 回答
1

你可以写这个

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

调用另一个构造函数。

于 2013-05-16T14:06:18.293 回答