Что является эквивалентом ключевого слова «друг» в C Sharp?
-
22-07-2019 - |
Вопрос
Что является эквивалентом ключевого слова "друг" в C Sharp?
Как использовать ключевое слово "internal"?
Я прочитал, что ключевое слово "internal" является заменой слова "friend" в C #.
Я использую DLL в своем проекте C #, для которого у меня есть исходный код, и все же я не хочу изменять существующий код. Я унаследовал класс, и я могу использовать свой унаследованный класс так, как я захочу. Проблема в том, что большая часть кода в родительском классе имеет защищенные методы. Позволит ли использование друга как-то получить доступ или вызвать эти защищенные методы?
Решение
Вы можете использовать модификатор доступа к ключевым словам внутренний
чтобы объявить тип или элемент типа доступным для кода только в той же сборке.
Вы можете использовать Класс InternalsVisibleToAttribute
, определенный в System.Rutime.CompilerServices
для объявления типа как доступного для кода в той же сборке или только в указанной сборке.
Вы используете первый, как и любой другой модификатор доступа , например как private
. Для остроумия:
internal class MyClass {
...
}
Вы используете второе следующим образом:
[assembly:InternalsVisibleTo("MyFriendAssembly", PublicKey="...")]
internal class MyVisibleClass {
...
}
И то, и другое по праву можно считать эквивалентом friend
в C #.
Методы, которые защищены
, являются уже доступны для производных классов.
Другие советы
Нет, "внутренний" не то же самое, что "друг" (по крайней мере, C ++ «друг»)
friend указывает, что этот класс доступен только ОДНОМУ, определенному классу.
internal указывает, что этот класс доступен ЛЮБОМУ классу в сборке.
1) Внутренний - это C # equivelant ключевого слова VB.NET «друг», как вы уже догадались (в отличие от замены)
2) Использование осуществляется следующим образом
internal void Function() {}
internal Class Classname() {}
internal int myInt;
internal int MyProperty { get; set; }
3) Это, по сути, модификатор доступа, который предусматривает, что доступность свойства class / function / vairiable /, помеченного как внутренняя, как если бы она была общедоступной для сборки, в которой она скомпилирована, и закрытой для любых других сборок р>
Ваш подкласс сможет получить доступ к защищенным членам класса, который вы наследуете.
Вы хотите предоставить доступ к этим защищенным членам другому классу?
Внутренний эквивалент друга. Защищенный метод доступен только в том же классе или от наследника. Если вы пытаетесь выставить защищенные методы от наследника, вы можете обернуть их в общедоступные методы.