如何创建两个构造函数重载,两者都只占用一个字符串参数?

Lou*_*hys 6 .net c# constructor

例如,您希望可以使用文件路径和使用字符串以两种方式初始化对象.通常两者构造应该采取一个字符串参数,MyObject(string file)MyObject(string content),但不可能超载这种方式.你有什么建议?

编辑:在第一种情况下,还需要文件路径,因此请不要建议读取文件内容的解决方案,只是将内容传递给其他构造函数.

sjr*_*sjr 16

我不是C#程序员,但这看起来像静态工厂方法模式的工作:

class MyObject {
  public static MyObject FromContent(string content) {
    return new MyObject(content);
  }

  public static MyObject FromFile(string path) {
    return new MyObject(ReadContentFromFile(path));
  }
}
Run Code Online (Sandbox Code Playgroud)

那你可以做

MyObject object = MyObject.FromFile("/some/path");
Run Code Online (Sandbox Code Playgroud)

这比使用常规构造函数更具可读性.

  • @Louis:为MyObject.FromFile()可以用来存储该信息的路径创建一个私有的setter,或者有一个私有的构造函数重载,它带有一个额外的伪参数来指示字符串是一个路径 - 这些可能是设计中的瑕疵,但由于它们是私有的,并且由此产生的公共界面很好而且干净,这可能是一个合理的权衡. (2认同)

Mar*_*ers 10

也许您可以更改第一个接受FileInfo:

class MyObject
{
    public MyObject(FileInfo file) { /* etc... */ }
    public MyObject(string content) { /* etc... */ }
}

...

MyObject o = new MyObject(new FileInfo(filename));
Run Code Online (Sandbox Code Playgroud)