匯出 (0) 列印
全部展開
本文章是由機器翻譯。 將指標移到文章內的文字上方即可查看原文。 其他資訊。
譯文
原文

ImportAttribute 類別

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

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

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

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

ImportAttribute 類型會公開下列成員。

  名稱描述
公用方法受 可攜式類別庫 支援ImportAttribute()使用預設合約名稱來匯入匯出集,初始化 ImportAttribute 類別的新執行個體。
公用方法受 可攜式類別庫 支援ImportAttribute(String)使用指定合約名稱來匯入匯出集,初始化 ImportAttribute 類別的新執行個體。
公用方法受 可攜式類別庫 支援ImportAttribute(Type)使用衍生自指定型別之合約名稱來匯入匯出,初始化 ImportAttribute 類別的新執行個體。
公用方法受 可攜式類別庫 支援ImportAttribute(String, Type)使用指定合約名稱和型別來匯入匯出集,初始化 ImportAttribute 類別的新執行個體。
回頁首

  名稱描述
公用屬性受 可攜式類別庫 支援AllowDefault取得或設定值,這個值表示當容器中沒有具有合約名稱的匯出時,是否將屬性、欄位或參數設定為其型別的預設值。
公用屬性受 可攜式類別庫 支援AllowRecomposition取得或設定值,這個值表示當容器中具有相符合約的匯出變更時,屬性或欄位是否要重新撰寫。
公用屬性受 可攜式類別庫 支援ContractName取得要匯入之匯出的合約名稱。
公用屬性受 可攜式類別庫 支援ContractType取得要匯入的匯出型別。
公用屬性受 可攜式類別庫 支援RequiredCreationPolicy取得或設定值,這個值表示對於用來滿足這個匯入的匯出結果,匯入工具需要特定 CreationPolicy
公用屬性Source取得或設定值,指定可以滿足此匯入的範圍。
公用屬性TypeId在衍生類別中實作時,取得這個 Attribute 的唯一識別項。 (繼承自 Attribute)。
回頁首

  名稱描述
公用方法受 可攜式類別庫 支援Equals基礎架構。傳回數值,表示這個執行個體是否等於指定的物件。 (繼承自 Attribute)。
受保護的方法受 可攜式類別庫 支援Finalize 允許物件在記憶體回收進行回收之前,嘗試釋放資源並執行其他清除作業。 (繼承自 Object)。
公用方法受 可攜式類別庫 支援GetHashCode傳回這個執行個體的雜湊碼。 (繼承自 Attribute)。
公用方法受 可攜式類別庫 支援GetType取得目前執行個體的 Type (繼承自 Object)。
公用方法IsDefaultAttribute在衍生類別中覆寫時,表示這個執行個體的值是否為衍生類別的預設值。 (繼承自 Attribute)。
公用方法Match在衍生類別中覆寫時,會傳回值,表示這個執行個體是否等於指定物件。 (繼承自 Attribute)。
受保護的方法受 可攜式類別庫 支援MemberwiseClone建立目前 Object 的淺層複本 (Shallow Copy)。 (繼承自 Object)。
公用方法受 可攜式類別庫 支援ToString傳回表示目前物件的字串。 (繼承自 Object)。
回頁首

  名稱描述
明確介面實作私用方法_Attribute.GetIDsOfNames將一組名稱對應至一組對應的分派識別項 (Dispatch Identifier)。 (繼承自 Attribute)。
明確介面實作私用方法_Attribute.GetTypeInfo擷取物件的型別資訊,可以用來取得介面的型別資訊。 (繼承自 Attribute)。
明確介面實作私用方法_Attribute.GetTypeInfoCount擷取物件提供的型別資訊介面數目 (0 或 1)。 (繼承自 Attribute)。
明確介面實作私用方法_Attribute.Invoke提供物件所公開的屬性和方法的存取權。 (繼承自 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.5.2、4.5.1、4.5、4

.NET Framework Client Profile

支援版本:4

可攜式類別庫

支援版本:可攜式類別庫

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (不支援伺服器核心角色), Windows Server 2008 R2 (SP1 (含) 以後版本支援伺服器核心角色,不支援 Itanium)

.NET Framework 並不支援各種平台的所有版本。如需支援版本的清單,請參閱.NET Framework 系統需求

這個類型的任何 Public static (在 Visual Basic 中為 Shared) 成員都是安全執行緒。不保證任何執行個體成員是安全執行緒。

社群新增項目

新增
顯示:
© 2014 Microsoft