本文為機器翻譯文章。如需檢視英文版,請選取 [原文] 核取方塊。您也可以將滑鼠指標移到文字上,即可在快顯視窗顯示英文原文。
譯文
原文

ImportAttribute 類別

 

指定應由提供屬性、 欄位或參數值 CompositionContainer物件。

命名空間:   System.ComponentModel.Composition
組件:  System.ComponentModel.Composition (於 System.ComponentModel.Composition.dll)

System.Object
  System.Attribute
    System.ComponentModel.Composition.ImportAttribute

[AttributeUsageAttribute(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, 
	AllowMultiple = false, Inherited = false)]
public class ImportAttribute : Attribute

名稱描述
System_CAPS_pubmethodImportAttribute()

初始化的新執行個體 ImportAttribute 類別中,匯入匯出預設合約名稱。

System_CAPS_pubmethodImportAttribute(String)

初始化的新執行個體 ImportAttribute 類別中,匯入匯出至指定的合約名稱。

System_CAPS_pubmethodImportAttribute(String, Type)

初始化的新執行個體 ImportAttribute 類別中,匯入匯出具有指定的合約名稱和類型。

System_CAPS_pubmethodImportAttribute(Type)

初始化的新執行個體 ImportAttribute 類別,匯入匯出的合約名稱衍生自指定的型別。

名稱描述
System_CAPS_pubpropertyAllowDefault

取得或設定值,指出是否屬性、 欄位或參數將為其型別預設值時的匯出的合約名稱不存在於容器中。

System_CAPS_pubpropertyAllowRecomposition

取得或設定值,指出當容器中已變更的匯出相符的合約是否改編屬性或欄位。

System_CAPS_pubpropertyContractName

取得匯入匯出的合約名稱。

System_CAPS_pubpropertyContractType

取得匯入匯出的類型。

System_CAPS_pubpropertyRequiredCreationPolicy

取得或設定值,這個值指出匯入工具需要特定 CreationPolicy 用來滿足此匯入匯出。

System_CAPS_pubpropertySource

取得或設定值,指定可以同時滿足此匯入的範圍。

System_CAPS_pubpropertyTypeId

在衍生類別中實作時,取得這個 Attribute 的唯一識別碼。(繼承自 Attribute。)

名稱描述
System_CAPS_pubmethodEquals(Object)

此 API 支援 產品 基礎結構,而且不適合直接從程式碼使用。 傳回值,這個值指出此執行個體是否與指定的物件相等。(繼承自 Attribute。)

System_CAPS_protmethodFinalize()

允許物件在記憶體回收進行回收之前,嘗試釋放資源並執行其他清除作業。 (繼承自 Object。)

System_CAPS_pubmethodGetHashCode()

傳回這個執行個體的雜湊碼。(繼承自 Attribute。)

System_CAPS_pubmethodGetType()

取得目前執行個體的 Type(繼承自 Object。)

System_CAPS_pubmethodIsDefaultAttribute()

在衍生類別中覆寫時,表示這個執行個體的值是衍生類別的預設值。(繼承自 Attribute。)

System_CAPS_pubmethodMatch(Object)

當在衍生類別中覆寫時,傳回值,指出這個執行個體是否等於指定的物件。(繼承自 Attribute。)

System_CAPS_protmethodMemberwiseClone()

建立目前 Object 的淺層複製。(繼承自 Object。)

System_CAPS_pubmethodToString()

傳回代表目前物件的字串。(繼承自 Object。)

名稱描述
System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

將一組名稱對應至一組對應的分派識別項 (Dispatch Identifier)。(繼承自 Attribute。)

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

擷取物件的類型資訊,可以用來取得介面的類型資訊。(繼承自 Attribute。)

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetTypeInfoCount(UInt32)

擷取物件提供的類型資訊介面數目 (0 或 1)。(繼承自 Attribute。)

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

提供物件所公開的屬性和方法的存取權。(繼承自 Attribute。)

在屬性化程式設計模型中, ImportAttribute 用來宣告匯入或指定的組件的相依性。 它可以裝飾屬性、 欄位或方法。 組合,在組件匯入將會填入 CompositionContainer 該組件所屬的物件,使用所提供的匯出 CompositionContainer 物件。

主要是藉由比較合約名稱和合約型別取決於匯入是否符合指定的匯出。 一般來說,您就不必在程式碼中,使用匯入屬性時,請指定符合其中一種和它們將會自動從裝飾成員的型別推斷。 如果匯入必須符合不同的型別 (例如,子類別的裝飾的成員或該成員所實作之介面的型別) 的匯出,然後合約型別必須明確指定。 合約名稱也可以明確指定,例如若要區別具有相同類型的多個合約,但它通常會比較這一點可以透過中繼資料。 如需中繼資料的詳細資訊,請參閱 PartMetadataAttribute

下列範例顯示三個類別與成員以裝飾 ImportAttribute, ,和三個相符的匯出。

//Default export infers type and contract name from the
//exported type.  This is the preferred method.
[Export]
public class MyExport1
{
    public String data = "Test Data 1.";
}

public class MyImporter1
{
    [Import]
    public MyExport1 importedMember { get; set; }
}

public interface MyInterface
{

}

//Specifying the contract type may be important if
//you want to export a type other then the base type,
//such as an interface.
[Export(typeof(MyInterface))]
public class MyExport2 : MyInterface
{
    public String data = "Test Data 2.";
}

public class MyImporter2
{
    //The import must match the contract type!
    [Import(typeof(MyInterface))]
    public MyExport2 importedMember { get; set; }
}

//Specifying a contract name should only be 
//needed in rare caes. Usually, using metadata
//is a better approach.
[Export("MyContractName", typeof(MyInterface))]
public class MyExport3 : MyInterface
{
    public String data = "Test Data 3.";
}

public class MyImporter3
{
    //Both contract name and type must match!
    [Import("MyContractName", typeof(MyInterface))]
    public MyExport3 importedMember { get; set; }
}

class Program
{      

    static void Main(string[] args)
    {
        AggregateCatalog catalog = new AggregateCatalog();
        catalog.Catalogs.Add(new AssemblyCatalog(typeof(MyExport1).Assembly));
        CompositionContainer _container = new CompositionContainer(catalog);
        MyImporter1 test1 = new MyImporter1();
        MyImporter2 test2 = new MyImporter2();
        MyImporter3 test3 = new MyImporter3();
        _container.SatisfyImportsOnce(test1);
        _container.SatisfyImportsOnce(test2);
        _container.SatisfyImportsOnce(test3);
        Console.WriteLine(test1.importedMember.data);
        Console.WriteLine(test2.importedMember.data);
        Console.WriteLine(test3.importedMember.data);
        Console.ReadLine();

    }
}

.NET Framework
自 4.0 起供應
可攜式類別庫
提供支援︰ 可攜式 .NET 平台
Silverlight
自 4.0 起供應

此類型的任何 public static (在 Visual Basic 中 共用 在 Visual Basic 中) 成員皆為安全執行緒。不保證任何執行個體成員為安全執行緒。

回到頁首
顯示: