Перегрузка конструктора содержит уже определенный элемент с такой же подписью - PullRequest
0 голосов
/ 23 января 2012
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) {}

Таким образом, пользователи должны будут включить a, если они хотят использовать b ... не блестяще, но вы идете

Ответы [ 3 ]

4 голосов
/ 23 января 2012

лично я использую необязательные аргументы:

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

4 голосов
/ 23 января 2012

Имена параметров не имеют смысла в контексте перегрузок. Я вижу, что вы пытаетесь сделать, но я не знаю почему. Я бы полностью обошелся без него:

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

Затем вызывайте конструктор Module, передавая null значения в зависимости от ситуации.

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

Module m2 = new Module("bye", null, obj);
0 голосов
/ 23 января 2012

Это просто невозможно.Вы должны устранить эти две перегрузки конструктора.

Однако вместо этого вы можете работать со статическими фабричными методами.Убедитесь, что используете ясные имена, чтобы передать разницу потребителю 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); }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...