[C#] Behoorlijke WTF m.b.t. reflection.

Pagina: 1
Acties:

  • Wijnbo
  • Registratie: December 2002
  • Laatst online: 06-09 20:35

Wijnbo

Electronica werkt op rook.

Topicstarter
Hallo, kan iemand me dit uitleggen?

Ik heb een klasse, die extend van control. Tijdens runtime, breakpoint gezet waar ik het volgende doe:
De achtergrond kleur van de instantie van deze klasse is rood.

Ter verduidelijking: er zitten meerdere instaties van deze klasse in een dictionary, vandaar de pair.value. Die value is dus een instantie hiervan.

C#:
1
pair.value.GetType().InvokeMember(property.Name, BindingFlags.GetProperty, null,this, null);


waarbij propery.Name "BackColor" is:

Afbeeldingslocatie: http://i36.tinypic.com/2vubo1h.png

Dit geeft de volgende output:

Afbeeldingslocatie: http://i35.tinypic.com/66g001.png

Wtf. Waarom heb ik als achtergrond kleur "Control" (dus standaard grijs)?

Als ik het volgende doe: (Niets veranderd runtime, nog steeds op een breakpoint!)

Afbeeldingslocatie: http://i37.tinypic.com/6jozd0.png

Krijg ik inderdaad rood terug. Waarom dan niet met die reflection aanroep?

:?

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Waar vul je property mee?
Als onderstaande probeert werkt het dan wel?
C#:
1
value.GetType().InvokeMember("BackColor", BindingFlags.GetProperty, null,this, null);

Nu met Land Rover Series 3 en Defender 90


  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Je target moet natuurlijk wel hetgeen zijn waar je je call op aanroept.

Dit zou moeten werken:

C#:
1
pair.value.GetType().InvokeMember(property.Name, BindingFlags.GetProperty, null,pair.value, null);

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • Wijnbo
  • Registratie: December 2002
  • Laatst online: 06-09 20:35

Wijnbo

Electronica werkt op rook.

Topicstarter
Grijze Vos schreef op woensdag 23 september 2009 @ 12:31:
Je target moet natuurlijk wel hetgeen zijn waar je je call op aanroept.

Dit zou moeten werken:

C#:
1
pair.value.GetType().InvokeMember(property.Name, BindingFlags.GetProperty, null,pair.value, null);
:') ! Bedankt. Dit heeft me ongeveer een ochtend gekost. Was er inmiddels zelf ook achter :P Was copy paste code uit een andere class, waar ik dus wél de properties van de klasse zelf moest hebben.

[ Voor 15% gewijzigd door Wijnbo op 23-09-2009 14:23 ]