ManagementReferenceAttribute 类  
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
ManagementReferenceAttribute 将类成员、属性或方法参数标记为对另一个管理对象或类的引用。
注意:WMI .NET 库现在视为处于最终状态,且没有可用于会影响这些库的非安全性相关问题的进一步开发、增强或更新。 MI API 应用于所有新的开发。
public ref class ManagementReferenceAttribute sealed : Attribute[System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.Property, AllowMultiple=false)]
public sealed class ManagementReferenceAttribute : Attribute[<System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.Property, AllowMultiple=false)>]
type ManagementReferenceAttribute = class
    inherit AttributePublic NotInheritable Class ManagementReferenceAttribute
Inherits Attribute- 继承
- 属性
示例
此示例演示如何将 ManagementReferenceAttribute 特性与 一起使用 ManagementQualifierAttribute ,以创建链接其他两个 WMI 类的关联 WMI 类。 示例是一个分离的提供程序,该提供程序公开根/assoc 命名空间中的三个 WMI 类。 前两个类 NumberPhonetic 和 NumberLetter 由最后一个类 LetterPhonetic 链接。
若要编译示例,需要包含对 System.Management.Instrumentation 和 System.Configuration.Install 的引用。 必须针对生成的可执行文件运行 installutil.exe,并确保程序正在运行,才能使用实现的 WMI 类。
using System;
using System.Collections;
using System.Management.Instrumentation;
[assembly: WmiConfiguration("root/assoc", HostingModel = ManagementHostingModel.Decoupled)]
[System.ComponentModel.RunInstaller(true)]
public class TheInstaller : DefaultManagementInstaller
{ }
namespace AssocExample
{
    class Program
    {
        static void Main(string[] args)
        {
            InstrumentationManager.RegisterType(typeof(NumberPhonetic));
            InstrumentationManager.RegisterType(typeof(NumberLetter));
            InstrumentationManager.RegisterType(typeof(LetterPhonetic));
            Console.WriteLine("Press enter to exit");
            Console.ReadLine();
            InstrumentationManager.UnregisterType(typeof(NumberPhonetic));
            InstrumentationManager.UnregisterType(typeof(NumberLetter));
            InstrumentationManager.UnregisterType(typeof(LetterPhonetic));
        }
    }
  [ManagementEntity]
    public class NumberPhonetic
    {
        [ManagementKey]
        public int Number;
        [ManagementProbe]
        public string Name;
        [ManagementBind]
        public NumberPhonetic(int Number)
        {
           this.Number = Number;
           if(Number == 1)
           {
              Name = "alpha";
           }
           else if(Number == 2)
           {
              Name = "bravo";
           }
           else
           {
              throw new InstanceNotFoundException();
           }
        }
        [ManagementEnumerator]
        static public IEnumerable EnumerateInstances()
        {
            for (int i = 1; i < 3; i++)
            {
                yield return new NumberPhonetic(i);
            }
        }
    }
    [ManagementEntity]
    public class NumberLetter
    {
        [ManagementKey]
        public int Number;
        [ManagementProbe]
        public string Letter;
        [ManagementBind]
        public NumberLetter(int Number)
        {
           this.Number = Number;
           if(Number == 1)
           {
              Letter = "A";
           }
           else if(Number == 2)
           {
              Letter = "B";
           }
           else
           {
              throw new InstanceNotFoundException();
           }
        }
        [ManagementEnumerator]
        static public IEnumerable EnumerateInstances()
        {
            for (int i = 1; i < 3; i++)
            {
                yield return new NumberLetter(i);
            }
        }
    }
    [ManagementEntity]
    [ManagementQualifier("Association", Flavor = ManagementQualifierFlavors.DisableOverride)]
    public class LetterPhonetic
    {
        [ManagementReference(Type = "NumberLetter")]
        [ManagementKey]
        public string LetterNumber;
        [ManagementReference(Type = "NumberPhonetic")]
        [ManagementKey]
        public string PhoneticNumber;
        [ManagementEnumerator]
        static public IEnumerable EnumerateInstances()
        {
            ArrayList insts = new ArrayList();
            for (int i = 1; i < 3; i++)
            {
                LetterPhonetic inst = new LetterPhonetic();
                inst.LetterNumber = "Letter = " + i;
                inst.PhoneticNumber = "Phonetic = " + i;
                insts.Add(inst);
            }
            return insts;
        }
    }
}
注解
可以使用此属性创建关联类,如以下示例所示。
构造函数
| ManagementReferenceAttribute() | 初始化 ManagementReferenceAttribute 类的新实例。 这是无参数构造函数。 | 
属性
| Type | 获取或设置该引用类型的名称。 | 
| TypeId | 在派生类中实现时,获取此 Attribute 的唯一标识符。(继承自 Attribute) | 
方法
| Equals(Object) | 返回一个值,该值指示此实例是否与指定的对象相等。(继承自 Attribute) | 
| GetHashCode() | 返回此实例的哈希代码。(继承自 Attribute) | 
| GetType() | 获取当前实例的 Type。(继承自 Object) | 
| IsDefaultAttribute() | 在派生类中重写时,指示此实例的值是否是派生类的默认值。(继承自 Attribute) | 
| Match(Object) | 当在派生类中重写时,返回一个指示此实例是否等于指定对象的值。(继承自 Attribute) | 
| MemberwiseClone() | 创建当前 Object 的浅表副本。(继承自 Object) | 
| ToString() | 返回表示当前对象的字符串。(继承自 Object) | 
显式接口实现
| _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) | 将一组名称映射为对应的一组调度标识符。(继承自 Attribute) | 
| _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) | 检索对象的类型信息,然后可以使用该信息获取接口的类型信息。(继承自 Attribute) | 
| _Attribute.GetTypeInfoCount(UInt32) | 检索对象提供的类型信息接口的数量(0 或 1)。(继承自 Attribute) | 
| _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) | 提供对某一对象公开的属性和方法的访问。(继承自 Attribute) |