Есть ли шаблон для передачи параметра в другую сборку? - PullRequest
3 голосов
/ 30 марта 2012

Из пары моих сборок, таких как AssemblyA, AssemblyB, AssemblyC, AssemblyD, я вызываю метод в AssemblyE

, например:

DialogHelper.DisplayComments( param1,2,3,4) ;

сейчас для некоторых из этих сборок, а немне нужно иметь перегруженную версию метода DisplayComments (), которая принимает еще один новый параметр, который я хочу передать:

DialogHelper.DisplayComments(param1,2,3,4,"5") ;

Итак, я сделал один способ: создать перегрузку и передатьзначение.

Но мне было интересно, есть ли в .NET и Obeject-Oriented мире какой-либо другой элегантный способ сделать это, чтобы я мог передать это значение этой Ассамблее и этому методу?

Ответы [ 4 ]

2 голосов
/ 30 марта 2012

если у вас есть исходный код, вам лучше перегрузить метод DisplayComments

, в противном случае (если это не статические методы) вы можете создать метод расширения , который принимает еще один параметр

1 голос
/ 30 марта 2012

Старайтесь не учитывать передачу данных в другую сборку.Вместо этого сосредоточьтесь на простой передаче данных между объектами и методами.Какая сборка у этих типов, не имеет значения.Способ думать о DialogHelper подобен услуге.Это обеспечивает диалог для потребителей, которые имеют отдельные потребности.Где они живут, не имеет значения, то, что они хотят, является важной частью.

Здесь, кажется, есть необязательный дополнительный параметр комментария, который нужен некоторым потребителям.Вполне разумно предоставить это как перегруженную функцию или как отдельную функцию с необязательным параметром

public class DialogHelper {
  public static void DisplayComments(
    object param1, 
    int param2,  
    int param3,
    int param4,
    string param5 = "") {
    ...
  }
}
1 голос
/ 30 марта 2012

В OOP мире перегрузка уже очень элегантно .

Если вы хотите попробовать что-то еще, можете добавить Необязательные параметры , как например

DialogHelper.DisplayComments(string param1, int prm2, int prm3, int prm4, string paramOtional="5") ;

Удачи

1 голос
/ 30 марта 2012

Вы можете использовать ключевое слово params .Поскольку у вас смешанные типы (int и string), у вас будет две опции:

Использовать объект []

public void DisplayComments(params object[] myVariableLengthParams)

Использовать строковый параметр после первых 4 параметров:

public void DisplayComments(int param1, int param2, int param3, 
    int param4, params string[] myVariableStringParams)

ИЛИ, вы можете использовать значения по умолчанию, если вы используете 4.0 (Это может быть не лучшим вариантом, если вы используете публичный API. Он может не согласоваться с ожиданиями, если значение по умолчанию изменится, в соответствии сКомментарий Даниэля Хилгарта ниже.)

public void DisplayComments(int param1, int param2, int param3, 
    int param4, string param5 = "")

Наконец, вы можете использовать перегрузки (однако кажется, что вариант params может быть лучшим для вас).И это почти то же самое, что использование значений по умолчанию , если логика одинакова в обоих

 public void DisplayComments(int param1, int param2, int param3, int param4)
 {
     DisplayComments(int param1, int param2, int param3, int param4, "");
 }

 public void DisplayComments(int param1, int param2, int param3, int param4, 
     string param5)
 {
     //Final overload that does the logic
 }

, если логика не одинакова

 public void DisplayComments(int param1, int param2, int param3, int param4)
 {
     //Logic for 4 param
 }

 public void DisplayComments(int param1, int param2, int param3, int param4, 
     string param5)
 {
     //Logic for 5 param
 }

Вам разрешено иметь много методов с одинаковыми именами, если сигнатуры методов не одинаковы (одинаковый порядок, одинаковые типы, одинаковый тип возвращаемого значения)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...