Je-li můj C # majetek inicializovat?

hlasů
0

Jsem trochu zmatená o tom, kdy přesně můj Property se inicializuje.

Předpokládejme, že mají vlastnost deklarovanou takto:

private Dictionary<string, Dictionary<string,string>> MessageLookup
    {
        get
        {
           return messages ?? doSomething();
        }
    }

Způsob doSomething vyplní zprávy slovník a vrátí jej.

Moje otázka je, je-li tento kód spustit? Kdybych místo zarážku do kódu DoSomething, není zasažen, ale vlastnost MessageLookup drží dat (to je jediné místo, kde se inicializuje), když jsem ji zobrazit v debuggeru.

Spuštění tohoto kódu na stavbě? dělá debugger jej spustit automaticky, když jsem se vznášet nad název proměnné? Pokud ano, proč není zarážka hit?

Položena 03/08/2009 v 20:50
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
0

Je to běh, když je nemovitost nejprve vyhodnotit. Žádné pozadí věci děje.

Hádám, že nejste vidět, protože používáte QuickWatch zkontrolovat svůj objekt. V tomto bodě to bude vykonán a váš zarážka bude přeskočen.

Odpovězeno 03/08/2009 v 20:53
zdroj uživatelem

hlasů
7

Tento kód je spuštěn, když někdo odkazuje na majetku, a ne dříve.

Pokud použijete ladicí program, budete ji vidět, protože ladicí program pokusí automaticky načíst hodnoty vlastností (takže můžete vidět stav objektu). Nevím, zda je ladicí ignoruje zarážky, když je to posouzení vlastností pro sebe - to by vysvětlovalo všechno.

Zkuste spustit svůj kód není v debugger, a učinit některé přístupový kód vaší nemovitosti:

var lookup = someObject.MessageLookup;

Udělat doSomething()výpis trasování zásobníku a uvidíte, co se děje.

Odpovězeno 03/08/2009 v 20:53
zdroj uživatelem

hlasů
0

Charakter getry (a ToString()na to přijde), jsou považovány za čisté , což v podstatě znamená, že vyhodnocení nemá žádné vedlejší účinky. Měli byste přepsat kód přilnout k tomuto předpokladu, nebo budete čelit nepříjemné následky . Je-li nutné použít líné inicializaci v době přístupové, použijte GetMessageLookup()namísto metody.

Odpovězeno 03/08/2009 v 21:03
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more