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 型別和成員的可視性。 |