У меня есть ситуация, когда у меня есть класс, построенный двумя разными способами. Один использует текстовое значение, а другой — привязку. Проблема, с которой я сталкиваюсь, заключается в том, что оба они представлены строкой, строкой.
Мой код имеет это:
new ValueGrid("Name", nameof(_vm.Name)) or
new ValueGrid("Name", "Name")
я бы хотел быть
new ValueGrid("Name", "John")
В случае первого примера я могу закодировать конструктор следующим образом:
public ValueGrid(string Text1, string Text2) : this()
{
this.Text1 = Text1;
this.SetBinding(ValueGrid.Text2Property, new Binding(Text2));
}
В случае второго примера я могу закодировать конструктор следующим образом:
public ValueGrid(string Text1, string Text2) : this()
{
this.Text1 = Text1;
this.Text2 = Text2;
}
Моя проблема в том, что оба конструктора, хотя и действуют по-разному, состоят из строки, за которой следует строка.
Есть ли у кого-нибудь предложения о том, как я могу справиться с этой ситуацией?
Чтобы ответить на ваш вопрос в заголовке: вы не можете.
Глядя на пример, я думаю, что было бы лучше передать класс привязки в первом примере, и это даст требуемый результат.
public ValueGrid(string Text1, Binding toBind) : this()
{
this.Text1 = Text1;
this.SetBinding(ValueGrid.Text2Property, toBind);
}
// usage:
new ValueGrid("Name", new Binding(nameof(_vm.Name)))
А во втором примере будет конструктор string, string
:
public ValueGrid(string Text1, string Text2) : this()
{
this.Text1 = Text1;
this.Text2 = Text2;
}
// usage:
new ValueGrid("Name", "John")
Используйте фабричные методы, которые могут называться по-разному. У вас будет один частный конструктор без параметров:
private ValueGrid() {}
И два фабричных метода:
public static ValueGrid FromText(string Text1, string Text2)
{
var valueGrid = new ValueGrid {
Text1 = Text1,
Text2 = Text2
};
return valueGrid;
}
public static ValueGrid FromBinding(string Text1, string Text2)
{
var valueGrid = new ValueGrid {
Text1 = Text1
};
valueGrid.SetBinding(ValueGrid.Text2Property, new Binding(Text2));
return valueGrid;
}
@RichardS Их имена будут основаны на том, что представляет второй параметр, например FromBinding
и FronText
, как я показал. Вы также можете добавить значение первого параметра.
Как бы я назвал эти два метода?