构造函数重载包含已定义具有相同签名的成员

时间:2012-01-23 09:35:16

标签: c# constructor overloading

public Module(string a, object obj) : this(a, null, obj) { }

public Module(string b, object obj) : this(null, b, obj) { }

这些构造函数重载不起作用

  

'已经定义了一个具有相同参数类型的成员'

我环顾四周并意识到我不能在c#中做到这一点,但有人可以建议解决这个问题吗?

编辑:感谢您的回答。

在这种情况下,我已经决定暂时使用它:

public Module(string a, object obj) : this(a, null, obj) { }

public Module(string a, string b, object obj) : this(a, b, obj) {}

因此,如果他们想要使用b,那么用户将不得不包含一个......不是很精彩但是你去了

3 个答案:

答案 0 :(得分:4)

参数名称在重载的上下文中毫无意义。我可以看到你想要做什么,但我不确定为什么。我完全放弃它:

public Module(string a, string b, object obj){}

然后调用Module构造函数,并根据需要传入null值。

Module m = new Module(null, "hi", obj);

Module m2 = new Module("bye", null, obj);

答案 1 :(得分:4)

我个人使用可选参数:

public Module(object obj, string a = null,string b = null) : this(a, b, obj) { }

下面是一篇关于它们是什么以及如何使用它们的文章,注意虽然它们只能在VS2010中使用(它们是编译器的一部分而不是语言,因此它们可用于.net 3.5以及4.0){{3 }}

答案 2 :(得分:0)

这是不可能的。您应该删除这两个构造函数重载。

但是,您可以使用静态工厂方法。确保使用明确的名称来传达API使用者的差异。

static Module CreateA(string a, object o) { return new Module(a, null, o); }
static Module CreateB(string b, object o) { return new Module(null, b, o); }