Что является эквивалентом ключевого слова «друг» в C Sharp?

StackOverflow https://stackoverflow.com/questions/445490

Вопрос

Что является эквивалентом ключевого слова "друг" в 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 /, помеченного как внутренняя, как если бы она была общедоступной для сборки, в которой она скомпилирована, и закрытой для любых других сборок

    Ваш подкласс сможет получить доступ к защищенным членам класса, который вы наследуете.

    Вы хотите предоставить доступ к этим защищенным членам другому классу?

    Внутренний эквивалент друга. Защищенный метод доступен только в том же классе или от наследника. Если вы пытаетесь выставить защищенные методы от наследника, вы можете обернуть их в общедоступные методы.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top