Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Контекстно-свободные и контекстно-зависимые типы



Типы.NET, которые не требуют никакого особого контекстного сопровождения,

называются контекстно-свободными (context-agile) объектами. К таким объектам доступ

может получаться из любого места внутри обслуживающего домена приложения без

нарушения их требований времени выполнения.

Рис. 4. Процессы, домены приложений и границы контекста

Создание контекстно-свободных объектов не требует приложения никаких

особых усилий, поскольку для их создания просто не нужно ничего делать (ни снабжать

их какими-либо контекстными атрибутами, ни порождать от базового класса System.

ContextBoundObject):

// Контекстно-свободный объект загружается в нулевой контекст.

public class SportsCar{}

С другой стороны, объекты, которые действительно требуют выделения отдельного

контекста, называются контекстно-зависимыми (context-bound) объектами и должны

обязательно наследоваться от базового класса System.ContextBoundObject. Этот

базовый класс отражает тот факт, что соответствующий объект может правильно

функционировать только в рамках контекста, в котором он был создан. Зная о роли

контекста.NET должно быть совершенно ясно, что в случае попадания контекстно-зависимого объекта каким-то образом в несоответствующий контекст, будет обязательно случаться что-то плохое, причем в самый неподходящий момент.

Помимо наследования от Systern.ContextBoundObject, контекстно-зависимый тип должен сопровождаться специальными атрибутами.NET, называемыми контекстными атрибутами. Все контекстные атрибуты наследуются от базового класса Context Attribute, который является членом пространства имен System.Runtime.Remoting.Contexts:

public class ContextAttribute:

Attribute, IContextAttribute, IContextProperty

public ContextAttribute(string name);

public string Name { virtual get; }

public object Typeld { virtual get; }

public virtual bool Equals(object o);

public virtual void Freeze (

System.Runtime.Remoting.Contexts.Context newContext);

public virtual int GetHashCode();

public virtual void GetPropertiesForNewContext(

System.Runtime.Remoting.Activation.IConstructionCallMessage ctorMsg);

public Type GetTypeO; public virtual bool IsContextOK(

Systern.Runtime.Remoting.Contexts.Context ctx,

System.Runtime.Remoting.Activation.IConstructionCallMessage ctorMsg);

public virtual bool IsDefaultAttribute ();

public virtual bool IsNewContextOK(

System.Runtime.Remoting.Contexts.Context newCtx);

public virtual bool Match(object obj);

public virtual string ToStringO;

}

Благодаря тому, что класс ContextAttribute не является герметизированным,

допускается создавать и свои собственные специальные контекстные атрибуты

(унаследовав от ContextAttribute и переопределив необходимые виртуальные методов). После этого, конечно же, можно создавать и специальные программные единицы, способные реагировать на контекстные настройки.





Дата публикования: 2015-07-22; Прочитано: 461 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...