Avatar billede orca Nybegynder
25. oktober 2003 - 19:05 Der er 6 kommentarer og
1 løsning

Dynamisk oprettelse af klasse instans

Jeg har en klasse, kaldet X. Y og Z nedarver begge fra X klassen.

Jeg har nu et tilfælde hvor jeg ud fra to parametre skal oprette enten en instans af Y eller Z, dog skal de bruges 100% ens bagefter. Dvs. jeg skal kalde metoden DoSomething() på både Y og Z, dog er det vigtigt at instansen der oprettes er af den rigtige type, da både Y og Z har deres egen implementering af DoSomething.

Skal jeg ud i en if/switch omgang? Eller kan man lave noget smart?


Pseudo:
(Y/Z) minVar = new (Y/Z)();
minVar.DoSomething();


Nogen forslag?
Avatar billede arne_v Ekspert
25. oktober 2003 - 19:06 #1
Du laver en factory.

X minvar = XFactory.newInstance("giv mig en Y");
minvar.DoSomething();
Avatar billede arne_v Ekspert
25. oktober 2003 - 19:07 #2
newInstance er så en static metode i XFactory som laver enten en Y eller
en Z baseret på parametre.
Avatar billede arne_v Ekspert
25. oktober 2003 - 19:08 #3
Koden inde i newInstance kan meget vel bruge if eller switch, men det
pænt gemt af vejen.

Kaldes factory pattern.
Avatar billede arne_v Ekspert
25. oktober 2003 - 19:12 #4
public static X NewInstance(string s)
{
  if(s.Equals("giv mig en Y"))
  {
      return new Y();
  }
  else
  {
      return new Z();
  }
}

eller noget i den stil ...
Avatar billede orca Nybegynder
25. oktober 2003 - 19:52 #5
Jeg bukker og takker :)
Avatar billede z42cool Nybegynder
26. oktober 2003 - 00:15 #6
Er det ikke lidt bøvlet? Så skal base klassen laves om hver gang scenariet udvides med flere klasser, hvorfor ikke bare:


if (givMigEnY)
{
  instance = Activator.CreateInstance("Y");
}
else
{
  instance = Activator.CreateInstance("Z");
}
Avatar billede arne_v Ekspert
26. oktober 2003 - 00:50 #7
Fordele:
  factory klassen skal ikke udvides ved nye sub klasser af X

Ulemper:
  koster lidt i performance

(og du vil naturligvis ikke have den if, så er der ikke meget pointe i
ideen)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester