Нужно уточнить область действия друга и защищенного друга - PullRequest
3 голосов
/ 15 июня 2011

Хорошо, у меня есть некоторые головные боли относительно квалификаторов Friend и Protected Friend.Информация, которую я читаю везде, выглядит для меня как юридический язык.Некоторым нравится более простой юридический язык, но все же юридический язык.

Итак, я попытаюсь представить структуру мысли в псевдо-VB:

Предположим, у меня есть AssemblyOne :

Public Class classA_One
  Public memberPub
  Private memberPriv
  Protected memberProt
  Friend memberFri
  ProtectedFriend memberProFri
End Class

Public Class classAB_One
  Inherits classA_One
  ...
End Class

Public Class classC_One
  Dim objA_One as classA_One
End Class

Кто-то еще (коллега) берет мой сгенерированный .dll, ссылается на него и создает AssemblyTwo :

Public Class ClassAD_Two
  Inherits classA_One
  ...
End Class

Public Class classE_Two
  Dim objA_One as classA_One
End Class

Я хочу знать, чтовидимость членов classA_One.Я уверен, что:

  • memberPub виден везде
  • memberPriv можно увидеть только в пределах classA_One
  • memberProt можно увидеть вclassA_One, classAB_One и classAD_One

В чем я не уверен, так это в видимости двух других членов classA_One.

Может ли кто-нибудь мне помочь?

TIA.

1 Ответ

2 голосов
/ 15 июня 2011

Friend: означает, что он доступен для любого типа в вашей сборке, и никто, ссылающийся на вашу сборку, не сможет его увидеть.

Protected Friend: означает, что тип доступен только производным элементам, или типы вашей сборки, которые не являются производными или не являются частью вашей сборки, не смогут получить к нему доступ.

memberFri: доступен для classAB_one и всех остальных в классах сборки

memberProFri: доступно для classAB_one, но не в classC_one

...