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,那么用户将不得不包含一个......不是很精彩但是你去了
答案 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); }