Class property

Zivjo,

imam eno bolj eksoticno vprasanje. Ali obstaja moznost, da class/objekt ugotovi, kdaj nekdo dostopa do njegovega propertija....

Recimo:

class MojRazred

{

     onPropertyAccessEvent()

    {

        return "42"; 

    } 

}

 

main()

{

    MojRazred obj = new MojRazred();

    Console.WriteLine(obj.Prop1);
    Console.WriteLine(obj.SoajxvswjsdfD);

    ..... 

}
 

... in bi mi vsi property  vrnili doloceno vrednost, ceprav niso definirani ?

 

lp 

Avtor: rocco, objavljeno na portalu SloDug.si (Arhiv)

Leave a comment

Please note that we won't show your email to others, or use it for sending unwanted emails. We will only use it to render your Gravatar image and to validate you as a real person.

lemmy
lemmy - četrtek, 29. marec 2007

rocco:    MojRazred obj = new MojRazred();    Console.WriteLine(obj.Prop1);    Console.WriteLine(obj.SoajxvswjsdfD);Na tak nacin gotovo NE, ker te prevajalnik ne bo nikamor spustil. Naceloma bi lahko spisal metodo, ki s pomocjo Reflection-a skusa pridobiti vrednost, vendar si v tem primeru na stringih (torej, ne podajas vec obj.Prop1, ampak GetValue(obj, "Prop1"). Meni osebno bi slo v takem primeru (se opravicujem) na kozlanje, ker se bo enkrat nasel nekdo, ki bo v MojRazred definiral property Prop1, potem se bo pa zatipkal pri GetValue(obj, "Pro1") in a) dobil 42 in b) izgubil 2 uri, da bo ugotovil zakaj mu koda ne dela :). Podoben problem sem imel, ko sem hotel spisati delegata na propertije in se na koncu odlocil, da sebi in drugim ne zaupam dovolj... lp,Gregor 

spirit1
spirit1 - petek, 02. marec 2007

channel sink = kanalni ponor

SxR
SxR - petek, 02. marec 2007

Zdravo.Nisem sicer prepričan, da je to tisto kar hočeš - mogoče pa se mi le dozdeva. Poigraš se lahko z objekti iz razreda MarshalByRefObject  oziroma ContextBoundObject. Ker ti objekti (oziroma kljent ) zaradi konteksta potrebujejo proxy lahko, tako kot pri remoting objektih dodaš ahem channel sink (kako za vraga se to reče ... umivalnik ? ;)) ).Sicer si pa preberi: http://msdn.microsoft.com/msdnmag/issues/03/03/ContextsinNET/ LP 

AndrejT
AndrejT - četrtek, 01. marec 2007

Če si poskušam predstavljati, kaj želiš narediti... Imaš objekt, za katerega v runtime ne veš, katere lastnosti ima, pa želiš recimo vseeno dostopat do njegove lastnosti "Prop1", če jo slučajno ima? Če gre za to, ti bo pomagal Reflection, v nasprotnem primeru pa še dodatno razloži svojo situacijo.

rocco
rocco - četrtek, 01. marec 2007

Saj vem, da se da narediti tudi drugace, ampak me je vseeno zanimalo, ce obstaja kaksna taka moznost. Vendar bi se najverjetneje res ze pri prevajalniku zataknilo... lp 

F34R
F34R - četrtek, 01. marec 2007

Tole je malo skregano z logiko, kaj če bi ti mogoče kar povedal kaj ti dejansko želiš naredit, pa bomo vidli če je kakšen drugačen pristop bolj smiseln!

MihaM
MihaM - četrtek, 01. marec 2007

Moram priznat, da mi ni čist jasno. Kako naj prevajalnik ve, kateri property naj uporabi, če niso definirani?Mogoče znaš povedat, kaj hočeš dosečt?

rocco
rocco - četrtek, 01. marec 2007

v mojem primeru, bi izpis bil:4242pa ceprav Prop1 in  SoajxvswjsdfD nista definirana znotraj MojRazred. 

spirit1
spirit1 - četrtek, 01. marec 2007

hmm... poisci si na googlu observer pattern. zdi se mi da je to tisto kar isces.ni mi pa jasno kako to mislis, da ti property nekaj vrne ko ni definiran. kdo ni definiran?ce hoces genericen return potem ti mora vsak property vrnit object.dej malce bolj razlozi kaj tocno zelis.