信息
您所需的主题如下所示。但此主题未包含在此库中。

ContractClassAttribute 类

2013/12/13

指定一个单独的类型包含此类型的代码协定。

System.Object
  System.Attribute
    System.Diagnostics.Contracts.ContractClassAttribute

Namespace:  System.Diagnostics.Contracts
程序集:  mscorlib(位于 mscorlib.dll 中)

[AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Delegate|AttributeTargets.Interface, AllowMultiple = false, 
	Inherited = false)]
[ConditionalAttribute("CONTRACTS_FULL")]
[ConditionalAttribute("DEBUG")]
public sealed class ContractClassAttribute : Attribute

ContractClassAttribute 类型公开以下成员。

  名称说明
公共方法ContractClassAttribute初始化 ContractClassAttribute 类的新实例。
返回顶部

  名称说明
公共属性TypeContainingContracts获取包含此类型的代码协定的类型。
返回顶部

  名称说明
公共方法Equals基础结构。 返回一个值,该值指示此实例是否与指定的对象相等。 (从 Attribute 继承。)
受保护的方法Finalize允许 Object 在垃圾回收器回收该对象之前尝试释放资源并执行其他清理操作。 (从 Object 继承。)
公共方法GetHashCode返回此实例的哈希代码。 (从 Attribute 继承。)
公共方法GetType获取当前实例的 Type (从 Object 继承。)
公共方法Match当在派生类中重写时,返回一个指示此实例是否等于指定对象的值。 (从 Attribute 继承。)
受保护的方法MemberwiseClone创建当前 Object 的浅表副本。 (从 Object 继承。)
公共方法ToString返回一个字符串,它表示当前的对象。 (从 Object 继承。)
返回顶部

使用此特性标记的类型具有包括在单独类型中的代码协定。包含协定的类型在构造函数中进行指定。

下面的示例演示如何使用 ContractClassAttribute 特性来指定 IArray 接口的协定包含在 IArrayContracts 类中。


using System;
using System.Diagnostics.Contracts;

// An IArray is an ordered collection of objects.    
[ContractClass(typeof(IArrayContract))]
public interface IArray
{
    // The Item property provides methods to read and edit entries in the array.
    Object this[int index]
    {
        get;
        set;
    }

    int Count
    {
        get;

    }

    // Adds an item to the list.  
    // The return value is the position the new element was inserted in.
    int Add(Object value);

    // Removes all items from the list.
    void Clear();

    // Inserts value into the array at position index.
    // index must be non-negative and less than or equal to the 
    // number of elements in the array.  If index equals the number
    // of items in the array, then value is appended to the end.
    void Insert(int index, Object value);


    // Removes the item at position index.
    void RemoveAt(int index);
}

[ContractClassFor(typeof(IArray))]
internal abstract class IArrayContract : IArray
{
    int IArray.Add(Object value)
    {
        // Returns the index in which an item was inserted.
        Contract.Ensures(Contract.Result<int>() >= -1);
        Contract.Ensures(Contract.Result<int>() < ((IArray)this).Count);
        return default(int);
    }
    Object IArray.this[int index]
    {
        get
        {
            Contract.Requires(index >= 0);
            Contract.Requires(index < ((IArray)this).Count);
            return default(int);
        }
        set
        {
            Contract.Requires(index >= 0);
            Contract.Requires(index < ((IArray)this).Count);
        }
    }
    public int Count
    {
        get
        {
            Contract.Requires(Count >= 0);
            Contract.Requires(Count < ((IArray)this).Count);
            return default(int);
        }
    }

    void IArray.Clear()
    {
        Contract.Ensures(((IArray)this).Count == 0);
    }

    void IArray.Insert(int index, Object value)
    {
        Contract.Requires(index >= 0);
        Contract.Requires(index <= ((IArray)this).Count);  // For inserting immediately after the end.
        Contract.Ensures(((IArray)this).Count == Contract.OldValue(((IArray)this).Count) + 1);
    }

    void IArray.RemoveAt(int index)
    {
        Contract.Requires(index >= 0);
        Contract.Requires(index < ((IArray)this).Count);
        Contract.Ensures(((IArray)this).Count == Contract.OldValue(((IArray)this).Count) - 1);
    }
}


Windows Phone OS

受以下版本支持: 8.0

此类型的所有公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

显示: