Wpis z mikrobloga

mam 4 klasy, chciał bym aby po nacisnięciu przycisku tworzył sie obiekt z losowo wybranej klasy.
Nastukałem coś takiego, ale nie działa oczywiście :)
Pomocy :)

private void OnBClicked(object sender, EventArgs e)
{
int number = rnd.Next(1, 4);
var pop = "b" + number;
pop window = new pop();

this.ShowPopup(window);

}

#csharp #programista15k #programowanie
  • 16
@unxtres: no nie wiesz jak rzeczy działają. Nie możesz podstawić nazwy klasy pod zmienną a potem używać tej zmiennej jako identyfikatora klasy. Pierwszy raz widzę, żeby ktoś tak robił. Jakaś logika tutaj jest ale dziwnie się na to patrzy
@unxtres: stwórz Factory class która będzie miała metodę CreateRandom i tam inicjalizuj obiekt. Będzie jeszce problem z returnem ale tu możesz albo zwracać object albo jakis interfejs który ma kazda klasa albo bazową klase albo poczytaj o nugecie OneOf
@unxtres:
@Saly: zapis jest rzeczywiście zły ale da się oprowac na nazwach typów tylko trzeba to zapisać tak:

statycznie:
var myType=typeof(b1);

lub dynamicznie:
var myType = assemblyOfThatType.GetType("namespace.b1");

A potem mozna tak stworzyć instancje:
b1 instance = (b1)Activator.CreateInstance(myType);
@unxtres: robisz interfejs IPopup, ktory bedzie mial metode ShowPopup(), teraz tworzysz 4 klasy (Klasa1, Klasa2...) ktore implementuja ten interfejs. I w konfiguracji unity robisz zeby typy byly porejestrowane po name i resolvujesz losowy:

int number = rnd.Next(1, 4);
var pop = "b" + number;

IUnityContainer container = new UnityContainer();
container.RegisterType("b1");
container.RegisterType("b2");

IPopup losowy = container.Resolve(pop);

losowy.ShowPopup();
@unxtres: Jak to nie unity, przecież napisałeś że c#. Unity container to nie jest to samo co Unity (ten program do robienia gier), to jest czysto .netowe rozwiazanie do wzorca projektowego Inversion of Control