协慌网

登录 贡献 社区

从另一个调用一个构造函数

我有两个构造函数,它们将值提供给只读字段。

class Sample
{
    public Sample(string theIntAsString)
    {
        int i = int.Parse(theIntAsString);

        _intField = i;
    }

    public Sample(int theInt)
    {
        _intField = theInt;
    }


    public int IntProperty
    {
        get { return _intField; }
    }
    private readonly int _intField;

}

一个构造函数直接接收值,另一个构造函数进行一些计算并获取值,然后设置字段。

现在这里是抓住:

  1. 我不想复制设置代码。在这种情况下,只设置一个字段,但当然可能不止一个。
  2. 要使字段只读,我需要从构造函数中设置它们,因此我无法将共享代码 “提取” 到实用程序函数中。
  3. 我不知道如何从另一个构建函数调用。

有任何想法吗?

答案

像这样:

public Sample(string str) : this(int.Parse(str)) {
}

如果没有在自己的方法中进行初始化(例如因为你想在初始化代码之前做太多,或者将它包装在 try-finally 中,或者其他什么),那么你想要的东西不能令人满意地实现你可以拥有任何或所有构造函数通过引用初始化例程传递 readonly 变量,然后初始化例程将能够随意操作它们。

class Sample
{
    private readonly int _intField;
    public int IntProperty
    {
        get { return _intField; }
    }

    void setupStuff(ref int intField, int newValue)
    {
        intField = newValue;
    }

    public Sample(string theIntAsString)
    {
        int i = int.Parse(theIntAsString);
        setupStuff(ref _intField,i);
    }

    public Sample(int theInt)
    {
        setupStuff(ref _intField, theInt);
    }
}

在构造函数的主体之前,使用以下任一方法:

: base (parameters)

: this (parameters)

例:

public class People: User
{
   public People (int EmpID) : base (EmpID)
   {
      // Add more statements here.
   }
}