HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Típusinformációk, értékadás property-nek név alapján


Példaprogram letöltése

8071 bájt

Sok esetben jó lenne elérni egy típus egyes tulajdonságait a programból sztringként. Mellékelt példában egy tetszőleges típusú osztály összes property-ét lekérdezzük programból, valamint arra is láthatunk módszert, hogy miként adhatunk értéket egy-egy property-nek, úgy hogy annak csak a nevére hivatkozunk sztringként, pl.: SetPropertyValueByName(textBox1, "BackColor", Color.AliceBlue);

Kezdjük azzal, hogy lekérdezzük egy adott objektum property-eit és azok tulajdonságait. Példaként a Form-al tesszük ezt. Ehhez egy Type osztályra lesz szükségünk. A Form GetType függvénye pont ezt szolgáltatja visszatérési értékként, így könnyű dolgunk van. Ahhoz, hogy megtudjuk e típusnak a property-eit, ahhoz használnunk kell a GetProperties függvényt. Ez a függvény egy PropertyInfo osztályokat tartalmazó tömböt ad vissza. A tömb minden egyes eleme egy-egy property-nek az információt tartalmazza.
     protected void button1_Click (object sender, System.EventArgs e)
      {
        Type t = this.GetType();
        PropertyInfo[] p = t.GetProperties();
        string[] s = new string[3];        
Miután rendelkezésre áll a szükséges információ, most már csak meg kell jelenítenünk azt. Ehhez egy foreach ciklust használunk, mellyel végigmegyünk a tömb minden elemén. A PropertyInfo osztály Name property-e árulja el az adott property nevét. Ha a CanRead property igaz, akkor az adott property olvasható. Ha a CanWrite property igaz, akkor az adott property értéke meg is változtatható. Ha kíváncsiak vagyunk, hogy mi az adott property típusa, akkor ezt a PropertyType property-n keresztül határozhatjuk meg. Ezen belül a FullName property egy olyan sztringet ad vissza, mely utal a típus minősített megnevezésére, pl.: System.Int32.
      foreach(PropertyInfo i in p)
      {          
        s[0] = i.Name;
        s[1] = i.CanRead.ToString();
        s[2] = i.CanWrite.ToString();
        s[3] = i.PropertyType.FullName;          
        listView1.Items.Add(new ListViewItem(s));
      }
Egy-egy objektumnak nem csak lekérdezhetjük a property-eit, hanem közvetve el is érhetjük azokat, módosíthatjuk akár értéküket is. Ezt felhasználva könnyen készíthetünk egy olyan függvényt, melynek három paramétert adunk át:
  • melyik objektumot akarjuk elérni
  • melyik property-ét akarjuk elérni
  • mi legyen a megadott objektum megadott property-ének új értéke
      protected void button2_Click (object sender, System.EventArgs e)
      {
        SetPropertyValueByName(this, "BackColor", Color.AliceBlue);        
      }
Most már csak el kell készítenünk a SetPropertyValueByName nevű belső függvényünket és ettől kezdve bármilyen típusú objektum, bármely property-ének tetszőleges értéket adhatunk úgy, hogy az elérni kívánt property-t csak a nevével, egy sztringen keresztül azonosítjuk.
A megvalósítás a következő: a paraméterként kapott objektumról szintén kérünk egy típus információt a GetType függvénnyel. Második lépésként lekérjük a megadott property-ét a GetProperty függvénnyel. Itt paraméterként a kérdéses property nevét kell megadnunk sztringként. Visszatérési értékként kapunk egy PropertyInfo típusú objektumot. Ennek SetValue hívásával pedig tetszőlegesen módosíthatjuk a property aktuális értékét.
      private void SetPropertyValueByName(object Object, string PropertyName, object NewValue)
      {
        Type t = Object.GetType();
        PropertyInfo p = t.GetProperty(PropertyName);
        p.SetValue(Object, NewValue, null);        
      }

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2001 évkönyv 138. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |