Avatar billede danni03 Nybegynder
28. december 2006 - 12:45 Der er 6 kommentarer

En sjov problemstilling om reflection

Hej, her er en lille problemstilling jeg har døjet lidt med i dag.

Jeg har følgende:
object obj = new object();

'obj' anvender jeg i en metode hvor at objectet han have forskellige typer fra kald til kald af metoden.

Altså, det ene kald kan 'obj' have typen 'Person' og det andet typen 'Medarbejder'.

Nu vil jeg kunne caste obj til current type når metoden bliver kaldt.

altså (Person)obj hvis det er person og (Medarbejder)obj hvis det er Medarbejder.

Metoden skal er generisk så den kan køres med alle mine entityklasser og je gkender kun Typen op obj.

Hvordan kan jeg cast objektet? Jeg går udfra det er noget med reflection at gøre.
Avatar billede kalp Novice
28. december 2006 - 12:49 #1
if(obj.GetType().ToString() == "Medarbejder")
Medarbejder medarbejder = (Medarbejder)obj;
else if(obj.GetType().ToString() == "Person")
Person medarbejder = (Person)obj;

måske.. har ikke lige testet hvad der bliver udskrevet via. tostring.
Avatar billede danni03 Nybegynder
28. december 2006 - 12:57 #2
ja, det er nogenlunde korrekt, men det skal være dynamisk så man ikke behøver, at teste for typen.
Avatar billede kalp Novice
28. december 2006 - 13:07 #3
jeg har ikke rørt ved reflection endnu så kan ikke rigtig komme med et bud der
Avatar billede arne_v Ekspert
28. december 2006 - 15:20 #4
jeg forstaar slet ikke problemet

hvis du har en metode der modtager et System.Object som kan vaere af vilkaarlig type, saa
kan du jo per definition kun kalde System.Object's metoder paa det

hvis du ved at alle de objekter der kaldes med enten arver fra en basis klasse
eller implementerer et interface saa de har en eller flere metoder, saa kan du jo
bare type caste til den basis klasse eller interface

hvis du har et fejl design (dog ikke noedvendigvis din skyld) hvor du ved at
alle de objekter der kaldes med har en given metode men uden at der er en basis
klasse eller et interface, saa kan du kalde en metode udfra dens navn som string
via reflection
Avatar billede skov_p Praktikant
29. december 2006 - 09:54 #5
Med 'is' og 'as' keyword kan du se hvilken type dit object er caste det til den type

private void enMetode(object obj){
if(obj is Medarbejder){
  MessageBox.Show("obj er Medarbejder");
  Medarbejder m = obj as Medarbejder;
}
if(obj is Person){
  MessageBox.Show("obj er Person");
  Person p = obj as Person;
}
}
Avatar billede danni03 Nybegynder
04. januar 2007 - 09:25 #6
Hej arbe_v jeg fandt ud af det via reflection.

Type t = obj.Type();

Hvis jeg så kaldte t.getcustomattributes får jeg de attributter jeg skal bruge.
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