Aici. "
În plus, din punctul de vedere al modelului de securitate .NET, rolul este un șir. Să nu ne certăm cu unchii inteligenți în ochelari de la Microsoft, linia este atât de șir:
Rețineți că liniile sunt declarate ca constante; un pic mai târziu voi explica de ce este necesar acest lucru.
Apropo, nu mai sunt necesare clase auxiliare, puteți trece la programul propriu-zis. Am schițat aplicația pentru consolă, pentru a nu filozofa craftily: pentru a demonstra prototipul, în general, va coborî. Această aplicație arată modul în care se utilizează atributul PrincipalPermission în cod și mai multe cuvinte aici, în general, sunt inutile:
Să vedem ce sa întâmplat:
Comportamentul real corespunde comportamentului așteptat. Se pare că totul funcționează. Fiabil, frumos, ușor de utilizat. Lepota.
PS Oh, da, am uitat să explic de ce a face coarde constante. Dacă nu faceți acest lucru, compilatorul nu va putea să compileze programul, bârfind într-un mod foarte incoerent:
În ceea ce privește constantele în parametrii designer atribut: metadatele atributului sunt compilate la timpul de compilare, deci parametrii săi trebuie să fie constanți ai timpului de compilare. Ei bine, pot fi expresii typeof () sau o serie de constante de timp de compilare.
Și un moment interesant despre atribute: constructorul atributului este chemat numai atunci când încearcă să-l obțină. Deci, dacă în corpul constructorului există un argument argumentat cu aruncarea ArgumentException, atunci această bucurie va cădea exclusiv în runtime, dar nu la compilație (și este păcat, uneori ar fi util)
Ei bine, poate că m-am încântat de indiscutabilitatea înjurăturii, dar în ceea ce mă privește - totuși anunțarea cerințelor fără o sugestie de explicație a motivelor arată ca ceva ... deși da, că de la compilator să ia ceva, totul este bine.
În ceea ce privește constructorul de atribute, mi se pare că un astfel de dispozitiv oferă mai multe posibilități: în special, designerul are capacitatea de a ține seama de contextul runtime-ului, ceea ce, desigur, este imposibil la etapa de compilare. Ar fi fost mai convenabil să proiectezi atribute în etapa de compilare în cazuri speciale, dar mi se pare că prețul ar fi fost prea mare.