Хорошо, это прослушивает меня. Я знаю, что я его где-то читал, а google не помогает.
Каков уровень доступности метода, который не указывает модификатор доступа?
void Foo()
{
//code
}
Я хочу сказать internal
, но я не уверен на 100%.
Хорошо, это прослушивает меня. Я знаю, что я его где-то читал, а google не помогает.
Каков уровень доступности метода, который не указывает модификатор доступа?
void Foo()
{
//code
}
Я хочу сказать internal
, но я не уверен на 100%.
Доступность по умолчанию для типа internal
, но доступность по умолчанию этого типа членов зависит от типа.
В общем случае членами класса являются private
по умолчанию, где по умолчанию члены struct public
. Это зависит от языка; общедоступные модификаторы доступа по умолчанию для С++ являются общедоступными, а С# - частными.
Предполагая, что это метод С#, так как у вас есть тег ".net".
Люди должны различать доступность "член" и "класс".
Да, internal
является стандартным для классов, но private
является значением по умолчанию для членов.
Для класса: Internal является значением по умолчанию, если не указан модификатор доступа.
Для метода: Private является значением по умолчанию, если не указан модификатор доступа.
Из языка программирования С#, третье издание Андерса Хейлсберга и др., раздел 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
. Это соответствует
Ой, подождите, еще одна вещь....
interface
объявления метода, конечно, public
по определению. Таким образом, следующая реализация public
, без явного модификатора доступа.
public class MyClass : IEqualityComparer<MyClass>
bool IEqualityComparer<MyClass>.Equals(MyClass x , MyClass y) {}
}
Методы класса закрыты и закрыты по умолчанию в .NET. Это означает, что метод доступен только внутри класса и не может быть переопределен унаследованным классом.
надеюсь, что это прояснит все по скриншоту непосредственно из MSDN