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

本文关键字:成员 包含 重载 定义 构造函数 | 更新日期: 2023-09-27 18:21:12

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... 不出色,但你可以去

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

参数名称在重载的上下文中毫无意义。我能看出你想做什么,但我不知道为什么。我会完全省去它:

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

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

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

我个人使用可选参数:

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

这是一篇关于它们是什么以及如何使用它们的文章,请注意,尽管它们仅在VS2010中可用(它们是编译器的一部分而不是语言,因此它们在.net 3.5和4.0中可用(http://msdn.microsoft.com/en-us/library/dd264739.aspx

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

但是,您可以改用静态工厂方法。确保使用清晰的名称将差异传达给 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); }