Как я могу сделать два конструктора для класса, оба со строкой, строкой, но с разным назначением?

У меня есть ситуация, когда у меня есть класс, построенный двумя разными способами. Один использует текстовое значение, а другой — привязку. Проблема, с которой я сталкиваюсь, заключается в том, что оба они представлены строкой, строкой.

Мой код имеет это:

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;
}

Моя проблема в том, что оба конструктора, хотя и действуют по-разному, состоят из строки, за которой следует строка.

Есть ли у кого-нибудь предложения о том, как я могу справиться с этой ситуацией?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
85
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Чтобы ответить на ваш вопрос в заголовке: вы не можете.

Глядя на пример, я думаю, что было бы лучше передать класс привязки в первом примере, и это даст требуемый результат.

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 26.12.2020 08:39

@RichardS Их имена будут основаны на том, что представляет второй параметр, например FromBinding и FronText, как я показал. Вы также можете добавить значение первого параметра.

Sweeper 26.12.2020 08:41

Другие вопросы по теме