Настройка и расширение среды выполнения с помощью поведенийConfiguring and Extending the Runtime with Behaviors

Поведение позволяет изменять поведение по умолчанию и добавлять пользовательские расширения, которые проверяют и проверяют конфигурацию службы или изменяют поведение во время выполнения в приложениях клиента Windows Communication Foundation (WCF) и служб.Behaviors enable you to modify default behavior and add custom extensions that inspect and validate service configuration or modify runtime behavior in Windows Communication Foundation (WCF) client and service applications. В этом разделе описаны интерфейсы поведений, способы их реализации, а также порядок их добавления в описания служб (в приложениях служб) и конечных точек (в клиентских приложениях) как программным образом, так и с помощью файла конфигурации.This topic describes the behavior interfaces, how to implement them, and how to add them to the service description (in a service application) or endpoint (in a client application) programmatically or in a configuration file. Дополнительные сведения об использовании предоставляемых системой поведений см. в разделе Определение поведения службы во время выполнения и Указание поведения клиента во время выполнения.For more information about using system-provided behaviors, see Specifying Service Run-Time Behavior and Specifying Client Run-Time Behavior.

поведенияBehaviors

Типы поведения добавляются в объекты описания конечной точки службы или службы (в службе или на клиенте соответственно), прежде чем эти объекты будут использоваться Windows Communication Foundation (WCF) для создания среды выполнения, которая выполняет службу WCF или клиент WCF.Behavior types are added to the service or service endpoint description objects (on the service or client, respectively) before those objects are used by Windows Communication Foundation (WCF) to create a runtime that executes a WCF service or a WCF client. Если эти поведения вызываются в процессе создания среды выполнения, то они могут получать доступ к свойствам и методам среды выполнения, которые позволяют изменить создаваемую среду выполнения с использованием других контрактов, привязок и адресов.When these behaviors are called during the runtime construction process they are then able to access runtime properties and methods that modify the runtime constructed by the contract, bindings, and addresses.

Методы поведенийBehavior Methods

Все поведения имеют AddBindingParameters метод ApplyDispatchBehavior , метод, Validate метод и ApplyClientBehavior метод с одним исключением: Поскольку IServiceBehavior не может выполняться в клиенте, он не реализует ApplyClientBehavior.All behaviors have an AddBindingParameters method, an ApplyDispatchBehavior method, a Validate method, and an ApplyClientBehavior method with one exception: Because IServiceBehavior cannot execute in a client, it does not implement ApplyClientBehavior.

  • Метод AddBindingParameters служит для изменения или добавления пользовательских объектов в коллекцию, к которой могут общаться пользовательские привязки при создании среды выполнения.Use the AddBindingParameters method to modify or add custom objects to a collection that custom bindings can access for their use when the runtime is constructed. Например, с помощью этого метода можно задать требования защиты, которые влияют на способ создания канала, но не известны разработчику канала.For example, this how protection requirements are specified that affect the way the channel is built, but are not known by the channel developer.

  • Метод Validate служит для проверки дерева описания и соответствующего объекта среды выполнения, чтобы убедиться, что они соответствуют определенному набору условий.Use the Validate method to examine the description tree and corresponding runtime object to ensure it conforms to some set of criteria.

  • Методы ApplyDispatchBehavior и ApplyClientBehavior служат для проверки дерева описания и изменения среды выполнения в определенной области (на стороне службы или на стороне клиента соответственно).Use the ApplyDispatchBehavior and ApplyClientBehavior methods to examine the description tree and modify the runtime for a particular scope on either the service or the client. Кроме того, эти методы позволяют вставлять объекты расширения.You can also insert extension objects as well.

    Примечание

    Хотя эти методы получают дерево описания, оно доступно им только для проверки.Although a description tree is provided in these methods, it is for examination only. Если изменить дерево описания, поведение станет неопределенным.If a description tree is modified, the behavior is undefined.

Доступ к свойствам, которые можно изменить, и к интерфейсам настройки, которые можно реализовать, осуществляется через классы среды выполнения службы и клиента.The properties you can modify and the customization interfaces you can implement are accessed through the service and client runtime classes. Типами службы являются классы DispatchRuntime и DispatchOperation.The service types are the DispatchRuntime and DispatchOperation classes. Типами клиента являются классы ClientRuntime и ClientOperation.The client types are the ClientRuntime and ClientOperation classes. Классы ClientRuntime и DispatchRuntime являются точками входа расширяемости для доступа к коллекциям расширения и свойствам среды выполнения клиента и службы соответственно.The ClientRuntime and DispatchRuntime classes are the extensibility entry points to access client-wide and service-wide runtime properties and extension collections, respectively. Аналогично классы ClientOperation и DispatchOperation предоставляют доступ к коллекциям расширения и свойствам среды выполнения операций клиента и операций службы соответственно.Similarly, the ClientOperation and DispatchOperation classes expose client operation and service operation runtime properties and extension collections, respectively. Однако из объекта среды выполнения операции, если это требуется, можно получить доступ к объекту среды выполнения с более широкой областью и наоборот.You can, however, access the wider scoped runtime object from the operation runtime object and vice versa if need be.

Примечание

Описание свойств среды выполнения и типов расширений, которые можно использовать для изменения поведения клиента, см. в разделе расширение клиентов.For a discussion of runtime properties and extension types that you can use to modify the execution behavior of a client, see Extending Clients. Описание свойств среды выполнения и типов расширений, которые можно использовать для изменения поведения при выполнении диспетчера служб, см. в разделе Расширение диспетчеров.For a discussion of runtime properties and extension types that you can use to modify the execution behavior of a service dispatcher, see Extending Dispatchers.

Большинство пользователей WCF не взаимодействуют с средой выполнения напрямую; Вместо этого они используют основные конструкции модели программирования, такие как конечные точки, контракты, привязки, адреса и атрибуты поведения для классов или поведения в файлах конфигурации.Most WCF users do not interact with the runtime directly; instead they use core programming model constructs like endpoints, contracts, bindings, addresses, and behavior attributes on classes or behaviors in configuration files. Эти конструкции составляют дерево Description, которое является полной спецификацией для создания среды выполнения для поддержки службы или клиента, описываемого деревом описания.These constructs make up the description tree, which is the complete specification for constructing a runtime to support a service or client described by the description tree.

В WCF существует четыре вида поведения:There are four kinds of behaviors in WCF:

Эти поведения можно добавлять в различные объекты описания путем реализации пользовательских атрибутов, с помощью файлов конфигурации приложений или путем их непосредственного добавления в коллекцию поведений соответствующего объекта описания.You can add these behaviors to the various description objects by implementing custom attributes, using application configuration files, or directly by adding them to the behaviors collection on the appropriate description object. Однако их обязательно необходимо добавлять в объекты описания службы или конечной точки службы до вызова метода ICommunicationObject.Open объектов ServiceHost и ChannelFactory<TChannel>.The must, however, be added to a service description or service endpoint description object prior to calling ICommunicationObject.Open on the ServiceHost or a ChannelFactory<TChannel>.

Области поведенийBehavior Scopes

Каждый из четырех типов поведений соответствует определенной области доступа среды выполнения.There are four behavior types, each of which corresponds to a particular scope of runtime access.

Поведения службService Behaviors

Поведения служб, реализующие интерфейс IServiceBehavior, являются основным механизмом для изменения всей среды выполнения службы.Service behaviors, which implement IServiceBehavior, are the primary mechanism by which you modify the entire service runtime. Имеется три механизма добавления поведений служб к службам.There are three mechanisms for adding service behaviors to a service.

  1. С помощью атрибута класса службы.Using an attribute on the service class. При создании объекта ServiceHost реализация класса ServiceHost использует отражение, чтобы обнаружить набор атрибутов типа службы.When a ServiceHost is constructed, the ServiceHost implementation uses reflection to discover the set of attributes on the type of the service. Все атрибуты, реализующие интерфейс IServiceBehavior, добавляются в коллекцию поведений в объекте ServiceDescription.If any of those attributes are implementations of IServiceBehavior, they are added to the behaviors collection on ServiceDescription. Это позволяет таким поведениям участвовать в создании среды выполнения службы.This allows those behaviors to participate in the construction of the service run time.

  2. Добавление поведения в коллекцию поведений в объекте ServiceDescription программным образом.Programmatically adding the behavior to the behaviors collection on ServiceDescription. Эту задачу можно решить с помощью следующего фрагмента кода:This can be accomplished with the following lines of code:

    ServiceHost host = new ServiceHost(/* Parameters */);  
    host.Description.Behaviors.Add(/* Service Behavior */);  
    
  3. Реализация пользовательского элемента BehaviorExtensionElement, который расширяет конфигурацию.Implementing a custom BehaviorExtensionElement that extends configuration. Это позволяет использовать поведение службы в файлах конфигурации приложения.This enables the use of the service behavior from application configuration files.

Примерами поведения службы в WCF являются ServiceBehaviorAttribute атрибут ServiceThrottlingBehavior, и ServiceMetadataBehavior поведение.Examples of service behaviors in WCF include the ServiceBehaviorAttribute attribute, the ServiceThrottlingBehavior, and the ServiceMetadataBehavior behavior.

Поведения контрактовContract Behaviors

Поведения контрактов, реализующие интерфейс IContractBehavior, служат для расширения сред выполнения клиента и службы в рамках контракта.Contract behaviors, which implement the IContractBehavior interface, are used to extend both the client and service runtime across a contract.

Имеется два механизма добавления поведений контрактов к контрактам.There are two mechanisms for adding contract behaviors to a contract. Первый механизм предполагает создание пользовательского атрибута, который будет использоваться в интерфейсе контракта.The first mechanism is to create a custom attribute to be used on the contract interface. Когда интерфейс контракта передается либо ServiceHost в ChannelFactory<TChannel>, либо в, WCF проверяет атрибуты интерфейса.When a contract interface is passed to either a ServiceHost or a ChannelFactory<TChannel>, WCF examines the attributes on the interface. Все атрибуты, реализующие интерфейс IContractBehavior, добавляются в коллекцию поведений в объекте System.ServiceModel.Description.ContractDescription, созданном для этого интерфейса.If any attributes are implementations of IContractBehavior, those are added to the behaviors collection on the System.ServiceModel.Description.ContractDescription created for that interface.

Кроме того, можно реализовать интерфейс System.ServiceModel.Description.IContractBehaviorAttribute в атрибуте поведения пользовательского контракта.You can also implement the System.ServiceModel.Description.IContractBehaviorAttribute on the custom contract behavior attribute. В этом случае поведение, если оно применяется, выглядит следующим образом:In this case, the behavior is as follows when applied to:

•Интерфейс контракта.•A contract interface. В этом случае поведение применяется ко всем контрактам этого типа в любой конечной точке, а WCF игнорирует значение IContractBehaviorAttribute.TargetContract свойства.In this case, the behavior is applied to all contracts of that type in any endpoint and WCF ignores the value of the IContractBehaviorAttribute.TargetContract property.

•Класс службы.•A service class. В этом случае поведение применяется только к конечным точкам, контракт которых имеет значение, равное значению свойства TargetContract.In this case, the behavior is applied only to endpoints the contract of which is the value of the TargetContract property.

•Класс обратного вызова.•A callback class. В этом случае поведение применяется к конечной точке дуплексного клиента, а WCF игнорирует значение TargetContract свойства.In this case, the behavior is applied to the duplex client's endpoint and WCF ignores the value of the TargetContract property.

Второй механизм предполагает добавление поведения в коллекцию поведений объекта ContractDescription.The second mechanism is to add the behavior to the behaviors collection on a ContractDescription.

Примеры поведения контрактов в WCF включают System.ServiceModel.DeliveryRequirementsAttribute атрибут.Examples of contract behaviors in WCF include the System.ServiceModel.DeliveryRequirementsAttribute attribute. Дополнительные сведения и пример см. в справочном разделе.For more information and an example, see the reference topic.

Поведения конечных точекEndpoint Behaviors

Поведения конечных точек, реализующие интерфейс IEndpointBehavior, являются основным механизмом для изменения всей среды выполнения службы или клиента для конкретной конечной точки.Endpoint behaviors, which implement IEndpointBehavior, are the primary mechanism by which you modify the entire service or client run time for a specific endpoint.

Имеется два механизма добавления поведений конечных точек к службам.There are two mechanisms for adding endpoint behaviors to a service.

  1. Добавьте поведение в свойство Behaviors.Add the behavior to the Behaviors property.

  2. Реализуйте пользовательский элемент BehaviorExtensionElement, который расширяет конфигурацию.Implement a custom BehaviorExtensionElement that extends configuration.

Дополнительные сведения и пример см. в справочном разделе.For more information and an example, see the reference topic.

Поведения операцийOperation Behaviors

Поведения операций, реализующие интерфейс IOperationBehavior, служат для расширения сред выполнения клиента и службы для каждой из операций.Operation behaviors, which implement the IOperationBehavior interface, are used to extend both the client and service runtime for each operation.

Имеется два механизма добавления поведений операций к операциям.There are two mechanisms for adding operation behaviors to an operation. Первый механизм предполагает создание пользовательского атрибута, который будет использоваться в методе, моделирующем операцию.The first mechanism is to create a custom attribute to be used on the method that models the operation. ServiceHost При добавлении операции в ChannelFactoryили в WCF добавляет любые IOperationBehavior атрибуты в коллекцию OperationDescription поведений, созданную для этой операции.When an operation is added to either a ServiceHost or a ChannelFactory, WCF adds any IOperationBehavior attributes to the behaviors collection on the OperationDescription created for that operation.

Второй механизм предполагает непосредственное добавление поведения в коллекцию поведений объекта OperationDescription.The second mechanism is by directly adding the behavior to the behaviors collection on a constructed OperationDescription.

Примерами поведения операций в WCF являются OperationBehaviorAttribute TransactionFlowAttributeи.Examples of operation behaviors in WCF include the OperationBehaviorAttribute and the TransactionFlowAttribute.

Дополнительные сведения и пример см. в справочном разделе.For more information and an example, see the reference topic.

Создание поведений с помощью файла конфигурацииUsing Configuration to Create Behaviors

Поведения служб, конечных точек и контрактов можно разрабатывать таким образом, чтобы задавать их в коде с помощью атрибутов. Только поведения служб и конечных точек можно настраивать с помощью файлов конфигурации приложения и веб-службы.Service and endpoint, and contract behaviors can by designed to be specified in code or using attributes; only service and endpoint behaviors can be configured using application or Web configuration files. Предоставление доступа к поведениям с помощью атрибутов позволяет разработчикам задавать поведение во время компиляции; это значит, что такое поведение нельзя добавлять, удалять или изменять во время выполнения.Exposing behaviors using attributes allows developers to specify a behavior at compilation-time that cannot be added, removed, or modified at runtime. Этот подход часто применяется для поведений, которые обязательно нужны для правильной работы службы (например, связанные с транзакциями параметры атрибута System.ServiceModel.ServiceBehaviorAttribute).This is often suitable for behaviors that are always required for the correct operation of a service (for example, the transaction-related parameters to the System.ServiceModel.ServiceBehaviorAttribute attribute). Предоставление доступа к поведениям с помощью файлов конфигурации позволяет разработчикам переложить обязанности по спецификации и настойке этих поведений на тех, кто будет развертывать службу.Exposing behaviors using configuration allows developers to leave the specification and configuration of those behaviors to those who deploy the service. Такой подход удобно применять для поведений, которые являются необязательными компонентами, или для других конфигураций, которые зависят от развертывания, например, чтобы определить, нужно ли предоставлять метаданные всей службе или же только конкретной конфигурации авторизации службы.This is suitable for behaviors that are optional components or other deployment-specific configuration, such as whether metadata is exposed for the service or the particular authorization configuration for a service.

Примечание

Также можно использовать поведения, которые поддерживают файлы конфигурации, для реализации политик применения путем их вставки в файл конфигурации machine.config и блокировки соответствующих элементов от изменений.You can also use behaviors that support configuration to enforce company application policies by inserting them into the machine.config configuration file and locking those items down. Описание и пример см. в разделе как Блокировка конечных точек предприятия.For a description and an example, see How to: Lock Down Endpoints in the Enterprise.

Чтобы сделать поведение доступным с помощью файла конфигурации, разработчик должен создать производный класс для класса BehaviorExtensionElement, а затем зарегистрировать расширение в конфигурации.To expose a behavior using configuration, a developer must create a derived class of BehaviorExtensionElement and then register that extension with configuration.

В следующем примере кода показано, каким образом интерфейс IEndpointBehavior реализует объект BehaviorExtensionElement.The following code example shows how an IEndpointBehavior implements BehaviorExtensionElement:

// BehaviorExtensionElement members  
public override Type BehaviorType  
{  
  get { return typeof(EndpointBehaviorMessageInspector); }  
}  
  
protected override object CreateBehavior()  
{  
  return new EndpointBehaviorMessageInspector();  
}  

Чтобы система конфигурации загрузила пользовательский объект BehaviorExtensionElement, он должен быть зарегистрирован в качестве расширения.In order for the configuration system to load a custom BehaviorExtensionElement, it must be registered as an extension. В следующем примере кода показан файл конфигурации для предыдущего поведения конечной точки.The following code example shows the configuration file for the preceding endpoint behavior:

<configuration>  
  <system.serviceModel>  
    <services>  
      <service   
        name="Microsoft.WCF.Documentation.SampleService"  
        behaviorConfiguration="metadataSupport"  
      >  
        <host>  
          <baseAddresses>  
            <add baseAddress="http://localhost:8080/ServiceMetadata" />  
          </baseAddresses>  
        </host>  
        <endpoint  
          address="/SampleService"  
          binding="wsHttpBinding"  
          behaviorConfiguration="withMessageInspector"   
          contract="Microsoft.WCF.Documentation.ISampleService"  
        />  
        <endpoint  
           address="mex"  
           binding="mexHttpBinding"  
           contract="IMetadataExchange"  
        />  
      </service>  
    </services>  
    <behaviors>  
      <serviceBehaviors>  
      <behavior name="metadataSupport">  
        <serviceMetadata httpGetEnabled="true" httpGetUrl=""/>  
      </behavior>  
      </serviceBehaviors>  
      <endpointBehaviors>  
        <behavior name="withMessageInspector">  
          <endpointMessageInspector />  
        </behavior>  
      </endpointBehaviors>  
    </behaviors>  
    <extensions>  
      <behaviorExtensions>  
        <add   
          name="endpointMessageInspector"  
          type="Microsoft.WCF.Documentation.EndpointBehaviorMessageInspector, HostApplication, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"  
        />  
      </behaviorExtensions>  
    </extensions>  
  </system.serviceModel>  
</configuration>  

Где Microsoft.WCF.Documentation.EndpointBehaviorMessageInspector — это тип расширения поведения, HostApplication а — имя сборки, в которую был скомпилирован этот класс.Where Microsoft.WCF.Documentation.EndpointBehaviorMessageInspector is the behavior extension type and HostApplication is the name of the assembly into which that class has been compiled.

Порядок вычисленияEvaluation Order

Классы System.ServiceModel.ChannelFactory<TChannel> и System.ServiceModel.ServiceHost отвечают за построение среды выполнения на основе модели программирования и описания.The System.ServiceModel.ChannelFactory<TChannel> and the System.ServiceModel.ServiceHost are responsible for building the runtime from the programming model and description. Как было сказано выше, поведения участвуют в этом процессе, оказывая влияние на службы, конечные точки, контракты и операции.Behaviors, as previously described, contribute to that build process at the service, endpoint, contract, and operation.

Объект ServiceHost применяет поведения в следующем порядке.The ServiceHost applies behaviors in the following order:

  1. СлужбаService

  2. КонтрактContract

  3. Конечная точкаEndpoint

  4. ОперацияOperation

В рамках одной коллекции поведений порядок не гарантируется.Within any collection of behaviors, no order is guaranteed.

Объект ChannelFactory<TChannel> применяет поведения в следующем порядке.The ChannelFactory<TChannel> applies behaviors in the following order:

  1. КонтрактContract

  2. Конечная точкаEndpoint

  3. ОперацияOperation

В рамках одной коллекции поведений порядок также не гарантируется.Within any collection of behaviors, again, no order is guaranteed.

Добавление поведений программным образомAdding Behaviors Programmatically

Свойства объекта System.ServiceModel.Description.ServiceDescription в приложении службы нельзя изменять после вызова метода CommunicationObject.OnOpening для объекта System.ServiceModel.ServiceHostBase.Properties of the System.ServiceModel.Description.ServiceDescription in the service application must not be modified subsequent to the CommunicationObject.OnOpening method on System.ServiceModel.ServiceHostBase. Некоторые члены, например свойство ServiceHostBase.Credentials и методы AddServiceEndpoint классов ServiceHostBase и System.ServiceModel.ServiceHost создают исключения, если их изменить на этом этапе.Some members, like the ServiceHostBase.Credentials property and the AddServiceEndpoint methods on ServiceHostBase and System.ServiceModel.ServiceHost, throw an exception if modified past that point. Другие члены можно изменять без появления исключения, но результат при этом будет неопределенным.Others permit you to modify them, but the result is undefined.

Аналогично, на стороне клиента нельзя изменять значения System.ServiceModel.Description.ServiceEndpoint после вызова метода OnOpening для объекта System.ServiceModel.ChannelFactory.Similarly, on the client the System.ServiceModel.Description.ServiceEndpoint values must not be modified after the call to OnOpening on the System.ServiceModel.ChannelFactory. Если свойство ChannelFactory.Credentials изменить на этом этапе, будет создано исключение. Другие значения описания клиента можно изменять без возникновения ошибки,The ChannelFactory.Credentials property throws an exception if modified past that point, but the other client description values can be modified without error. однако результат в этом случае будет неопределенным.The result, however, is undefined.

Как для службы, так и для клиента, рекомендуется изменять описание до вызова метода CommunicationObject.Open.Whether for the service or client, it is recommended that you modify the description prior to calling CommunicationObject.Open.

Правила наследования атрибутов поведенийInheritance Rules for Behavior Attributes

Поведения всех четырех типов можно определять с использованием атрибутов - поведений служб и контрактов.All four types of behaviors can be populated using attributes – service behaviors and contract behaviors. Поскольку атрибуты определяются в управляемых объектах и членах, а управляемые объекты и члены поддерживают наследование, необходимо определить, как атрибуты поведений ведут себя в контексте наследования.Because attributes are defined on managed objects and members, and managed objects and members support inheritance, it is necessary to define how behavior attributes work in the context of inheritance.

На верхнем уровне действует следующее правило: для конкретной области (например, для службы, контракта или операции) применяются все атрибуты поведений в иерархии наследования для данной области.At a high level, the rule is that for a particular scope (for example, service, contract, or operation), all behavior attributes in the inheritance hierarchy for that scope are applied. Если имеется два атрибута поведений одного типа, используется тип более низкого уровня иерархии.If there are two behavior attributes of the same type, only the most-derived type is used.

Поведения службService Behaviors

Для заданного класса службы применяются все атрибуты поведения службы для этого класса и всех его родительских классов.For a given service class, all service behavior attributes on that class, and on parents of that class, are applied. Если атрибуты одного и того же типа встречаются на различных уровнях иерархии наследования, используется тип более низкого уровня иерархии.If the same type of attribute is applied at multiple places in the inheritance hierarchy, the most-derived type is used.

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]  
[AspNetCompatibilityRequirementsAttribute(  
    AspNetCompatibilityRequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]  
public class A { /* … */ }  
  
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]  
public class B : A { /* … */}  

В приведенном выше примере у службы B атрибут InstanceContextMode имеет значение Single, атрибут AspNetCompatibilityRequirementsMode - значение Allowed, а атрибут ConcurrencyMode - значение Single.For example, in the preceding case, the service B ends up with an InstanceContextMode of Single, an AspNetCompatibilityRequirementsMode mode of Allowed, and a ConcurrencyMode of Single. Атрибут ConcurrencyMode будет равняться Single, потому что атрибут ServiceBehaviorAttribute службы B расположен на более низком уровне иерархии по сравнению со службой A.The ConcurrencyMode is Single, because ServiceBehaviorAttribute attribute on service B is on "more derived" than that on service A.

Поведения контрактовContract Behaviors

Для заданного контракта применяются все атрибуты поведения контракта для этого интерфейса и всех его родительских интерфейсов.For a given contract, all contract behavior attributes on that interface and on parents of that interface, are applied. Если атрибуты одного и того же типа встречаются на различных уровнях иерархии наследования, используется тип более низкого уровня иерархии.If the same type of attribute is applied at multiple places in the inheritance hierarchy, the most-derived type is used.

Поведения операцийOperation Behaviors

Если данная операция не переопределяет существующую абстрактную или виртуальную операцию, никакие правила наследования не применяются.If a given operation does not override an existing abstract or virtual operation, no inheritance rules apply.

Если операция переопределяет существующую операцию, то применяются все атрибуты поведения данной операции и ее родительских операций.If an operation does override an existing operation, then all operation behavior attributes on that operation and on parents of that operation, are applied. Если атрибуты одного и того же типа встречаются на различных уровнях иерархии наследования, используется тип более низкого уровня иерархии.If the same type of attribute is applied at multiple places in the inheritance hierarchy, the most-derived type is used.