Friend 組件 (Visual Basic)

更新:2007 年 11 月

「Friend 組件」(Friend Assembly) 是可以存取另一個組件 (Assembly) 之 Friend 型別和成員的組件 (如需詳細資訊,請參閱 Friend (Visual Basic))。如果將組件識別為 Friend 組件,就不再需要將型別和成員標記為 public 供其他組件存取。這在下列案例中尤其方便:

  • 在單元測試期間,測試程式碼在另一個組件中執行,但是需要存取所測試組件中的成員,此時可以將該成員標記為 Friend。

  • 您在開發類別庫 (Class Library) 時,類別庫的附加功能包含在不同組件中,且需要存取現有組件中的成員,此時可以將該成員標記為 Friend。

備註

您可以使用 InternalsVisibleToAttribute 屬性 (Attribute),為特定組件指定一個或多個 Friend 組件。例如,如果您將 InternalsVisibleToAttribute 屬性加入至組件 A 並將組件 B 指定為 Friend 組件,則組件 B 將可以存取組件 A 中所有標記為 Friend 的型別和成員,如下列範例所示。

Imports System.Runtime.CompilerServices

<Assembly: InternalsVisibleTo("FriendAssembliesB")> 

' Friend class.
Friend Class FriendAssembliesA
    Public Sub Test()
        MsgBox("Friend Assemblies Sample Class")
    End Sub
End Class

' Public class with a Friend method.
Public Class FriendAssembliesClassA
    Friend Sub Test()
        MsgBox("Friend Assemblies Sample Method")
    End Sub
End Class

只有明確指定為 friend 的組件才能存取 Friend 型別和成員。例如,如果組件 B 是組件 A 的 friend,而組件 C 參考了組件 B,則 C 無法存取 A 中的 Friend 型別。

編譯器 (Compiler) 會對傳遞給 InternalsVisibleToAttribute 屬性的 Friend 組件名稱執行一些基本的驗證。如果組件 A 將 B 宣告為 Friend 組件,則驗證規則如下:

  • 如果組件 A 具有強式名稱,則組件 B 也必須具有強式名稱。傳遞給這個屬性的 Friend 組件名稱必須包含組件名稱,以及指派組件 B 時所用強式名稱金鑰的公開金鑰 (Public Key)。

    傳遞給 InternalsVisibleToAttribute 屬性的 Friend 組件名稱不能是組件 B 的強式名稱,意即請不要包含組件版本、文化特性 (Culture)、架構或公開金鑰語彙基元 (Token)。

  • 如果組件 A 不具強式名稱,則 Friend 組件名稱只應包含組件名稱。如需詳細資訊,請參閱 HOW TO:建立未簽署的 Friend 組件

  • 如果組件 B 具有強式名稱,則您必須使用專案設定或命令列的 /keyfile 編譯器選項,為組件 B 指定強式名稱金鑰。如需詳細資訊,請參閱 HOW TO:建立簽署的 Friend 組件

如需如何從模組檔案 (副檔名為 .netmodule 的檔案) 存取組件之 Friend 型別和方法的詳細資訊,請參閱 /moduleassemblyname

安全性注意事項:

InternalsVisibleToAttribute 屬性和 StrongNameIdentityPermission 類別之間有相似處。主要差異是 StrongNameIdentityPermission 可以要求安全性權限來執行特定程式碼區段,而 InternalsVisibleToAttribute 屬性則會控制 Friend 型別和成員的可視性。

請參閱

工作

HOW TO:建立未簽署的 Friend 組件

HOW TO:建立簽署的 Friend 組件

概念

組件

參考

InternalsVisibleToAttribute

組件連結器 (Al.exe)

/addmodule

其他資源

Visual Basic 編譯器