Friday, November 13, 2015

What are access modifiers are in C#?

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

Why to use access modifiers?


Access modifiers are an integral part of object-oriented programming. They support the concept of encapsulation, which promotes the idea of hiding functionality. Access modifiers allow us to know accessibility of  certain features.

In C# there are 5 different types of Access Modifiers.

public

The public keyword is an access modifier for types and type members. Public access is the most permissive access level.

There are no restrictions on accessing public members.

Accessibility: 
  • Can be accessed by objects of the class
  • Can be accessed by derived classes
  • Can be access in any assembly.
Example:
 class Program
    {
        static void Main(string[] args)
        {
            MyClass c = new MyClass();
            c.num1 = 200;
            Console.ReadLine();
        }
    }

 public  class bas
{
     public int num1;
}


 class MyClass : bas
 {

     public void Disp()
     {
         num1 = 900;
        
         Console.WriteLine(num1);
     }

    
 }

Here num1 is public and can be accessible in derived class as well as by object of both bas and
derived class which is MyClass.

private
 Private access is the least permissive access level.
 Private members are accessible only within the body of the class or the struct in which they are declared.

Accessibility: 
  • Cannot be accessed by object
  • Cannot be accessed by derived classes
  • Used by method or constructor of same class.
Example: In the following example num2 is not accessible outside the class.




         

The above program will give compilation error, as access to private is not permissible. In the below figure you can see the private member num1 is not available.

protected

A protected member is accessible from within the class in which it is declared, and from within any class derived from the class that declared this member.

A protected member of a base class is accessible in a derived class only if the access takes place through the derived class type.

Accessibility: 
  • Cannot be accessed by object of base and derived class.
  • By derived classes.
using System;



In the above program num1 is availbale in MyClass but when we try to access protected member in main it is not available as shown in the picture below that num1 is not listed in intellisense.

 
internal

The internal keyword is an access modifier for types and type members. We can declare a class as internal or its member as internal. Internal members are accessible only within files in the same assembly (.dll).

In other words, access is limited exclusively to classes defined within the current project assembly.

Accessibility:

In same assembly (public) 
  • Can be accessed by objects of the class
  • Can be accessed by derived classes
In other assembly (internal) 
  • Cannot be accessed by object
  • Cannot be accessed by derived classes
protected internal

The protected internal accessibility means protected OR internal, not protected AND internal.

In other words, a protected internal member is accessible from any class in the same assembly, including derived classes.

The protected internal access modifier seems to be a confusing but is a union of protected and internal in terms of providing access but not restricting. It allows:  
  • Inherited types, even though they belong to a different assembly, have access to the protected internal members.
  • Types that reside in the same assembly, even if they are not derived from the type, also have access to the protected internal members.

Default access

A default access level is used if no access modifier is specified in a member declaration. The following list defines the default access modifier for certain C# types:

enum: The default and only access modifier supported is public.

class: The default access for a class is private. It may be explicitly defined using any of the access modifiers.

interface: The default and only access modifier supported is public.

struct: The default access is private with public and internal supported as well.

The default access may suffice for a given situation, but you should specify the access modifier you want to use to ensure proper application behavior.


No comments:

Post a Comment

Write a program to reverse a string? using System; namespace ConsoleApp1 {     class Program     {         static void Main(string[] args)  ...