Лучший способ, о котором я могу думать, это.
В C# 5 был добавлен набор атрибутов информации о вызывающем абоненте, а именно [System.Runtime.CompilerServices.CallerMemberName]
, [System.Runtime.CompilerServices.CallerFilePath]
и [System.Runtime.CompilerServices.CallerLineNumber]
. Мы можем использовать CallerFilePathAttribute
, чтобы узнать, приходит ли вызывающий абонент из определенного файла .cs
.
Обычно один файл будет содержать только один класс или структуру. Например, ClassA
определен в ClassA.cs
. Вы можете проверить, соответствует ли имя файла вызывающего абонента ClassA.cs
.
Таким образом изменить параметры вашего метода, как это:
([CallerFilePath] string callerFilePath = "" /*Other parameters*/)
В методе, проверьте, если callerFilePath
соответствует путь к файлу ClassA
. Если это не так, напишите исключение, говорящее, что к способу можно получить доступ только от ClassA
!
Если вы поместите оба класса в сборку, предназначенную только для этих двух классов, вы можете использовать 'internal'. Но ... вы можете подумать, зачем вам это нужно. –
Какова рациональность такого дизайна? – dotctor
Возможный дубликат: http://stackoverflow.com/questions/203616/why-does-c-sharp-not-provide-the-c-style-friend-keyword –