Dzisiaj mam pewnie proste pytanie. Załóżmy mamy klasę z czterema właściwościami
class SomeClass{
public double A {get; set;}
public double B {get; set;}
public double C {get; set;}
public double D {get; set;}
}
Problem: chciałbym aby można było tworzyć obiekt albo z A,B,C albo A,B,D. Wszystkie właściwości są tego samego typu. Pierwsze rozwiązanie jakie mi przychodzi do głowy to użycie jakieś flagi w konstruktorze:
//deklaracja flagi poza klasą
enum SomeClassFlag {
ABC,
ABD
}
//i konstruktor klasy SomeClass:
public SomeClass(double value1, double value2, double value3, SomeClassFlag flag){
this.A = value1;
this.B = value2;
if(flag == SomeClassFlag.ABC){
this.C = value3;
} else {
this.D = value3;
}
}
Wydaje mi się to słabe i mało eleganckie rozwiązanie. Kolejne również chyba mało eleganckie rozwiązanie to z nullable types:
//konstruktor klasy SomeClass:
public SomeClass(double value1, double value2, double? value3, double? value4){
if(value3.HasValue && value4.HasValue)
throw new System.ArgumentException("wyjatek..");
this.A = value1;
this.B = value2;
if(value3.HasValue) {
this.C = value3.Value
} else {
this.D = value3.Value;
}
}
//przykladowe tworzenie obiektu z parametrami ABC:
new SomeClass(1.0,2.0,3.0, null);
Oba rozwiązania powyższe rozwiązania wydają mi się... prymitywne.
Czy istnieje jakiś wzorzec, który należałoby stosować w takim przypadku?