构造函数调用构造函数是更好的方法



我已经提交了一段代码以供审查,我得到的反馈是让构造函数调用构造函数而不是像下面这样重复的 set 语句是更好的做法:

    public GenericFileReader(string fileName)
    {
        _filename = fileName;
        _encoding = Encoding.GetEncoding("windows-1252");
    }
    public GenericFileReader(string fileName, Encoding encoding)
    {
        _filename = fileName;
        _encoding = encoding;
    }

我知道有办法使构造函数调用构造函数,如下所示:

    public GenericFileReader(string fileName) : 
        this(fileName, Encoding.GetEncoding("windows-1252"))
    {
    }
    public GenericFileReader(string fileName, Encoding encoding)
    {
        _filename = fileName;
        _encoding = encoding;
    }

第二个在减少代码行数方面似乎不错。我仍然不相信第二种方法比以前的方法更好。 因为,两次调用构造函数似乎比设置编码和文件名的成本更高。请让我知道哪种方法更好?

就个人而言,我更喜欢有 1 个构造函数,并让它调用如下所示的子函数来处理更复杂的东西。

编辑:请参阅Zohar对此回复的评论,说明为什么不重载构造函数。

您的最佳示例(国际海事组织(

之所以选择这个,是因为当我不使用供构造函数使用的中央函数时,我更喜欢它的可读性。但我通常有我的中心功能,如下面的例子所示。

public GenericFileReader(string filename) 
{
    _filename = filename;
    _encoding = Encoding.GetEncoding("windows-1252");
}
public GenericFileReader(string filename, Encoding encoding)
{
    _filename = filename;
    _encoding = encoding;
}

对于更复杂的构造函数,但使用您的示例

public GenericFileReader(string filename)
{
    init(ref filename);
}
public GenericFileReader(string filename, Encoding encoding)
{
    init(ref filename, encoding);
}
private init(ref string filename, Encoding encoding = null)
{
   _filename = filename;
   _encoding = encoding ?? Encoding.GetEncoding("windows-1252");
}

在底部情况下,您可以有多个重载的构造函数,它们都以不同的方式调用 init 函数。

最新更新