Кратко съдържание



страница50/73
Дата21.07.2018
Размер8.57 Mb.
1   ...   46   47   48   49   50   51   52   53   ...   73

Къде се използват атрибутите?


Атрибутите се използват вътрешно от .NET Framework за различни цели – при сериализация на данни, за описание на различни характеристики, свързани със сигурността на кода, за задаване на ограничения за опти­мизациите от JIT компилатора, така че кодът да може да се дебъгва, за взаимодействие с дизайнера на средата за разработка при създаване на .NET компоненти, при взаимодействие с неуправляван код, при работа с уеб услуги, в ASP.NET потребителски контроли и на много други места.

Ще разгледаме някои от най-важните приложения на атрибутите вът­решно в .NET Framework.


Декларативно управление на сигурността


.NET Framework дава възможност на разработчиците да поставят огра­ничения върху сигурността в два стила. Императивният стил е свързан със създаването на Permission обекти по време на изпълнение и извършване на обръщения към техните методи. Декларативният се осъществява чрез атрибути. Следва пример за декларативно управление на сигурността чрез атрибути:

[PrincipalPermissionAttribute(SecurityAction.Demand,

Name = "SomeUser", Role = "Administrator")]

public void DeleteCustomer(string aCustomerId)

{

// Delete the customer



}

В горния пример чрез атрибута PrincipalPermissionAttribute се указва на CLR, че за изпълнението на метода DeleteCustomer(…) е необходимо текущата нишка да се изпълнява от потребител SomeUser, който е в роля Administrator.

В темата "Сигурност в .NET Framework" ще се спрем в детайли върху императивното и декларативното управ­ление на сигурността.


Използване на автоматизирана сериализация на обекти


Сериализацията е процес на конвертиране на обект или свързан граф от обекти в поток от байтове. Десериализацията представлява обратния процес. В .NET Framework сериализацията и десериализацията се извър­шват авто­матично от CLR, но за да се укаже, че даден обект подлежи на сериали­зация, се използват атрибути. Ето един пример:

[Serializable]

public struct User

{

private string mLogin;



private string mPassword;

private string mRealName;

// ...

}


В примера чрез атрибута SerializableAttribute се указва на CLR, че структурата User може да се сериализира по стандартния за CLR начин.

Сериализацията в .NET Framework ще разгледаме по-детайлно в темата за сериализация на данни.


Компонентен модел на .NET


При проектирането на .NET платформата е залегнал принципът за компо­нентно-ориенти­раното програмиране. .NET Framework дефинира компо­нентен модел, който установява стандарти за разработване и изпол­зване на компоненти. При разработване на .NET компоненти чрез атри­бути към тях може да се дефинират метаданни, които се използват от Visual Studio .NET по време на дизайн. Ето един пример, в който чрез атрибут се указва категорията, в която да се появи свойството BorderColor в панела за настройка на свойствата за даден компонент:

public class SomeComponent : Control

{

// ...


[Category("Appearance")]

public Color BorderColor

{

get { … }



set { … }

}
// ...

}


На компонентния модел на .NET Framework ще обърнем по-специално внимание в темата за Windows Forms.

Създаване на уеб услуги в ASP.NET


.NET Framework има вградена поддръжка на уеб услуги. Уеб услугите служат за обмяна на информация между отдалечени приложения посред­ством стан­дартни протоколи. За управление на поведението на уеб услу­гите в ASP.NET се използват атрибути. Ето един пример, в който чрез атрибута [WebMethod] се указва, че даден метод е публично достъ­пен като част от дадена уеб услуга:

public class AddService : WebService

{

[WebMethod]



public int Add(int a, int b)

{

return a + b;



}

}


На уеб услугите в ASP.NET ще обърнем специално внимание в темата за уеб услуги.

Взаимодействие с неуправляван (Win32) код


.NET Framework може да взаимодейства с неуправляван Win32 код: да извиква Win32 функции, да използва COM компоненти и да публикува COM компоненти. За настройка на различни параметри на взаимодей­ствието с неуправляван код се използват атрибути. Един от тях е систем­ният атрибут DllImport. Нека разгледаме следния пример на декларация на външна Win32 функция:

[DllImport("user32.dll", EntryPoint="MessageBox")]

public static extern int ShowMessageBox(int hWnd, string text,

string caption, int type);


В примерния код чрез DllImport се указва, че статичният метод ShowMessageBox(…) е външна неуправлявана функция с име MessageBox от Win32 библиотеката user32.dll.

Ще обърнем специално внимание на атрибутите за връзка с неуправляван код в темата "Взаимодействие с неуправляван код".


Синхронизация при многонишкови приложения


.NET Framework използва вътрешно някои атрибути, за да осигури синхронизация при конкурентен достъп до даден метод от няколко нишки. Ето един пример, при който чрез специален атрибут (System.Runtime. CompilerServices.MethodImplAttribute) се указва, че методът SomeMethod() може да бъде изпълняван от най-много една нишка в даден момент:

[MethodImplAttribute (MethodImplOptions.Synchronized)]

public void SomeMethod() { ... }


1   ...   46   47   48   49   50   51   52   53   ...   73


База данных защищена авторским правом ©obuch.info 2016
отнасят до администрацията

    Начална страница