Подтвердить что ты не робот

Метод без модификатора доступа

Хорошо, это прослушивает меня. Я знаю, что я его где-то читал, а google не помогает.

Каков уровень доступности метода, который не указывает модификатор доступа?

void Foo()
{
    //code
} 

Я хочу сказать internal, но я не уверен на 100%.

4b9b3361

Ответ 1

Доступность по умолчанию для типа internal, но доступность по умолчанию этого типа членов зависит от типа.

В общем случае членами класса являются private по умолчанию, где по умолчанию члены struct public. Это зависит от языка; общедоступные модификаторы доступа по умолчанию для С++ являются общедоступными, а С# - частными.

Ответ 2

Предполагая, что это метод С#, так как у вас есть тег ".net".

Люди должны различать доступность "член" и "класс".

  • Стандартная доступность членов класса (включая методы) на С# является частной. См. https://msdn.microsoft.com/en-us/library/ba0a1yw2(v=vs.140).aspx
  • Доступность по умолчанию для самого класса является внутренней.

Ответ 3

Да, internal является стандартным для классов, но private является значением по умолчанию для членов.

Ответ 4

Для класса: Internal является значением по умолчанию, если не указан модификатор доступа.

Для метода: Private является значением по умолчанию, если не указан модификатор доступа.

Ответ 5

Из языка программирования С#, третье издание Андерса Хейлсберга и др., раздел 10.3.5 ( "Члены класса - модификаторы доступа" ) на стр. 434:

Объявление класса-члена может иметь любой из пяти возможных видов объявленной доступности (§3.5.1): public, protected internal, protected, internal или private. За исключением комбинации protected internal, это ошибка времени компиляции, чтобы указать более одного модификатора доступа. Если объявление класса не содержит модификаторов доступа, предполагается private. [Акцент мой]

И затем в разделе 11.2 ( "Элементы Struct" ) на стр. 539:

За исключением различий, отмеченных в п. 11.3, описания членов класса, приведенные в пп. 10.3 - § 10.14, также применяются к членам структуры.

В разделе 11.3 ничего не говорится о модификаторах доступа, поэтому мое чтение этого означает, что члены struct без модификатора доступа также по умолчанию private. Это соответствует

Ответ 6

Ой, подождите, еще одна вещь....

interface объявления метода, конечно, public по определению. Таким образом, следующая реализация public, без явного модификатора доступа.

public class MyClass : IEqualityComparer<MyClass>
    bool IEqualityComparer<MyClass>.Equals(MyClass x , MyClass y) {}
}

Ответ 7

Методы класса закрыты и закрыты по умолчанию в .NET. Это означает, что метод доступен только внутри класса и не может быть переопределен унаследованным классом.

Ответ 8

надеюсь, что это прояснит все по скриншоту непосредственно из MSDN

введите описание изображения здесь