Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What are the default access modifiers in C#?

What is the default access modifier for classes, methods, members, constructors, delegates and interfaces?

like image 276
Surya sasidhar Avatar asked Mar 26 '10 06:03

Surya sasidhar


People also ask

Which is the default access modifier?

The default access modifier is also called package-private, which means that all members are visible within the same package but aren't accessible from other packages: package com.

Which is the default access specifier in C?

What is the default access modifier for a Class in C#? Default access modifier of class is Internal. And private for class member.

What are access modifiers in C?

Access modifiers are keywords used to specify the declared accessibility of a member or a type.

What are the 3 types of access modifiers?

Access Modifiers in Java are used to define the accessibility of methods and data members. There are four main types of Access Modifiers – Default, Private, Protected, and Public.


1 Answers

The default access for everything in C# is "the most restricted access you could declare for that member".

So for example:

namespace MyCompany {     class Outer     {         void Foo() {}         class Inner {}     } } 

is equivalent to

namespace MyCompany {     internal class Outer     {         private void Foo() {}         private class Inner {}     } } 

The one sort of exception to this is making one part of a property (usually the setter) more restricted than the declared accessibility of the property itself:

public string Name {     get { ... }     private set { ... } // This isn't the default, have to do it explicitly } 

This is what the C# 3.0 specification has to say (section 3.5.1):

Depending on the context in which a member declaration takes place, only certain types of declared accessibility are permitted. Furthermore, when a member declaration does not include any access modifiers, the context in which the declaration takes place determines the default declared accessibility.

  • Namespaces implicitly have public declared accessibility. No access modifiers are allowed on namespace declarations.
  • Types declared in compilation units or namespaces can have public or internal declared accessibility and default to internal declared accessibility.
  • Class members can have any of the five kinds of declared accessibility and default to private declared accessibility. (Note that a type declared as a member of a class can have any of the five kinds of declared accessibility, whereas a type declared as a member of a namespace can have only public or internal declared accessibility.)
  • Struct members can have public, internal, or private declared accessibility and default to private declared accessibility because structs are implicitly sealed. Struct members introduced in a struct (that is, not inherited by that struct) cannot have protected or protected internal declared accessibility. (Note that a type declared as a member of a struct can have public, internal, or private declared accessibility, whereas a type declared as a member of a namespace can have only public or internal declared accessibility.)
  • Interface members implicitly have public declared accessibility. No access modifiers are allowed on interface member declarations.
  • Enumeration members implicitly have public declared accessibility. No access modifiers are allowed on enumeration member declarations.

(Note that nested types would come under the "class members" or "struct members" parts - and therefore default to private visibility.)

like image 60
Jon Skeet Avatar answered Sep 17 '22 14:09

Jon Skeet