Ok this is bugging me.. I know I've read it somewhere and google isn't helping.
What is the accessibility level of a method that does not specify an access modifier?
void Foo()
{
//code
}
I want to say internal
but I'm not 100% sure.
Ok this is bugging me.. I know I've read it somewhere and google isn't helping.
What is the accessibility level of a method that does not specify an access modifier?
void Foo()
{
//code
}
I want to say internal
but I'm not 100% sure.
The default accessibility for a type is internal
, but the default accesibility of that type's members depends on the type.
Generally speaking, members of a class are private
by default, where as members of a struct are public
by default. This varies by language; default struct access modifiers for C++ are public, where as for C#, they are private.
Assuming this is a C# method, since you have the ".net" tag.
People need to differentiate between "member" accessibility and "class" accessibility.
Yes, internal
is the default for classes, but private
is the default for members.
For a class: Internal is the default if no access modifier is specified.
For a method: Private is the default if no access modifier is specified.
From The C# Programming Language, Third Edition by Anders Hejlsberg et al, section 10.3.5 ("Class Members - Access Modifiers") on page 434:
A class-member-declaration can have any one of the five possible kinds of declared accessibility (§3.5.1):
public
,protected internal
,protected
,internal
, orprivate
. Except for theprotected internal
combination, it is a compile-time error to specify more than one access modifier. When a class-member-declaration does not include any access modifiers,private
is assumed. [Emphasis mine]
And then in section 11.2 ("Struct Members") on page 539:
Except for the differences noted in §11.3, the descriptions of class members provided in §10.3 through §10.14 apply to struct members as well.
Section 11.3 does not mention anything about access modifiers, so my reading of this implies that members of a struct
without an access modifier are also private
by default. This corresponds with what MSDN says and with my own experience.
Oh wait, there's one more thing ....
interface
method declarations are of course public
by definition. So the following implementation is public
, without an explicit access modifier.
public class MyClass : IEqualityComparer<MyClass>
bool IEqualityComparer<MyClass>.Equals(MyClass x , MyClass y) {}
}
Class methods are private and sealed by default in .NET. This means the method is only visible within the class and cannot be overridden by the inherited class.
hope this clarifies all as per screenshot directly from MSDN