Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Lenguaje C

Modificadores de acceso de C#

Modificadores de acceso C#

En este tutorial, aprenderemos sobre los modificadores de acceso público, privado, protegido e interno en C# con la ayuda de ejemplos.

En C#, los modificadores de acceso especifican la accesibilidad de tipos (clases, interfaces, etc.) y miembros de tipos (campos, métodos, etc.). Por ejemplo,

class Student {

  public string name;
    
  private int num;

  }

Aquí,

Tipos de modificadores de acceso

En C#, hay 4 tipos básicos de modificadores de acceso.


1. modificador de acceso público

Cuando declaramos un tipo o miembro de tipo public , se puede acceder desde cualquier lugar. Por ejemplo,

using System;

namespace MyApplication {

  class Student {
    public string name = "Sheeran";
      
    public void print() {
      Console.WriteLine("Hello from Student class");
     }
  }

  class Program {
    static void Main(string[] args) {
    
      // creating object of Student class
      Student student1 = new Student();
      
      // accessing name field and printing it
      Console.WriteLine("Name: " + student1.name);

      // accessing print method from Student
      student1.print();
      Console.ReadLine();
    }
  }
}

Salida

Name: Sheeran
Hello from Student class

En el ejemplo anterior, hemos creado una clase llamada Estudiante con un campo nombre y un método print() .

// accessing name field and printing it
Console.WriteLine("Name: " + student1.name);

// accessing print method from Student
student1.print();

Dado que el campo y el método son públicos, podemos acceder a ellos desde el Programa clase.

Nota :Hemos utilizado el objeto estudiante1 del Estudiante clase para acceder a sus miembros. Para obtener más información, visite la clase y objetos de C# .


2. modificador de acceso privado

Cuando declaramos un miembro de tipo con el private modificador de acceso, solo se puede acceder dentro del mismo class o struct . Por ejemplo,

using System;

namespace MyApplication {

  class Student {
    private string name = "Sheeran";
      
    private void print() {
      Console.WriteLine("Hello from Student class");
     }
  }

  class Program {
    static void Main(string[] args) {
    
      // creating object of Student class
      Student student1 = new Student();
      
      // accessing name field and printing it
      Console.WriteLine("Name: " + student1.name);

      // accessing print method from Student
      student1.print();

      Console.ReadLine();
    }
  }
}

En el ejemplo anterior, hemos creado una clase llamada Estudiante con un campo nombre y un método print() .

// accessing name field and printing it
Console.WriteLine("Name: " + student1.name);

// accessing print method from Student
student1.print();

Dado que el campo y el método son privados, no podemos acceder a ellos desde el Programa clase. Aquí, el código generará el siguiente error.

Error    CS0122    'Student.name' is inaccessible due to its protection level    
Error    CS0122    'Student.print()' is inaccessible due to its protection level    

3. modificador de acceso protegido

Cuando declaramos un miembro de tipo como protected , solo se puede acceder desde la misma clase y sus clases derivadas. Por ejemplo,

using System;

namespace MyApplication {

  class Student {
    protected string name = "Sheeran";
  }

  class Program {
    static void Main(string[] args) {
    
      // creating object of student class
      Student student1 = new Student();
      
      // accessing name field and printing it
      Console.WriteLine("Name: " + student1.name);
      Console.ReadLine();
    }
  }
}

En el ejemplo anterior, hemos creado una clase llamada Estudiante con un campo nombre . Dado que el campo está protegido, no podemos acceder a él desde el Programa clase.

Aquí, el código generará el siguiente error.

Error    CS0122    'Student.name' is inaccessible due to its protection level    

Ahora, intentemos acceder al protected miembro de una clase derivada.

using System;

namespace MyApplication {

  class Student {
    protected string name = "Sheeran";
  }
  
  // derived class
  class Program : Student {
    static void Main(string[] args) {

      // creating object of derived class
      Program program = new Program();
      
      // accessing name field and printing it
      Console.WriteLine("Name: " + program.name);
      Console.ReadLine();
    }
  }
}

Salida

Name: Sheeran

En el ejemplo anterior, hemos creado una clase Estudiante con un campo protegido nombre . Note que hemos heredado el Program clase del Estudiante clase.

// accessing name field and printing it
Console.WriteLine("Name: " + program.name);

Desde el protected se puede acceder al miembro desde clases derivadas, podemos acceder a name del Programa clase.


4. modificador de acceso interno

Cuando declaramos un tipo o miembro de tipo como internal , solo se puede acceder a él dentro del mismo ensamblado.

Un ensamblaje es una colección de tipos (clases, interfaces, etc.) y recursos (datos). Están diseñados para trabajar juntos y formar una unidad lógica de funcionalidad.

Es por eso que cuando ejecutamos un ensamblaje, todas las clases e interfaces dentro del ensamblaje se ejecutan juntas. Para obtener más información, visite el ensamblado de C#.


Ejemplo:interno dentro del mismo ensamblaje

using System;

namespace Assembly {

  class Student {
   internal string name = "Sheeran";
  }

  class Program {
    static void Main(string[] args) {
    
      // creating object of Student class
      Student theStudent = new Student();
      
      // accessing name field and printing it
      Console.WriteLine("Name: " + theStudent.name);
      Console.ReadLine();
    }
  }
}

Salida

Name: Sheeran

En el ejemplo anterior, hemos creado una clase llamada Estudiante con un campo nombre . Dado que el campo es internal , podemos acceder desde el Programa clase ya que están en el mismo ensamblado.

Si usamos internal dentro de un solo ensamblaje, funciona como el public modificador de acceso.


Ejemplo:interno en ensamblaje diferente

Primero creemos un conjunto.

// Code on Assembly1
using System;

namespace Assembly1 {

  public class StudentName {
    internal string name = "Sheeran";
  }

  class Program {
    static void Main(string[] args) {
    }
  }
}

Aquí, este código está en Asamblea1 . Hemos creado un campo interno nombre dentro de la clase NombreEstudiante . Ahora, solo se puede acceder a este campo desde el mismo ensamblaje Asamblea1 .

Ahora, creemos otro ensamblaje.

// Code on Assembly2
using System;

// access Assembly1
using Assembly1;

namespace Assembly2 {
  class Program {
    static void Main(string[] args) {
      StudentName student = new StudentName();

      // accessing name field from Assembly1
      Console.Write(student.name);
      Console.ReadLine();
     }
  }
}

Aquí, este código está en Assembly2 . Estamos tratando de acceder al nombre campo del NombreEstudiante clase(Ensamblaje1 ).

Para acceder a campos desde Asamblea1 , primero debemos establecer la referencia de Asamblea1 en Asamblea2 . Ahora el código

using Assembly1;

nos permite usar el código de Assembly1 a Ensamblaje2 .

Aquí, cuando intentamos acceder al nombre campo de Asamblea2 , obtenemos un error.

Error    CS0122    'StudentName.name' is inaccessible due to its protection level

Esto se debe a que nombre es un campo interno presente en Assembly1 .


5. modificador de acceso interno protegido

El protected internal es una combinación de protected y internal modificadores de acceso.

Cuando declaramos un miembro protected internal , se puede acceder desde el mismo ensamblado y la clase derivada de la clase contenedora desde cualquier otro ensamblado.

// Code on Assembly1
using System;

namespace Assembly1 {
  public class Greet {
    protected internal string msg="Hello";
  }

  class Program {
    static void Main(string[] args) {
      Greet greet = new Greet();
      Console.WriteLine(greet.msg);
      Console.ReadLine();
     }
  }
}

Salida

Hello

El código anterior está en Asamblea1 .

En el ejemplo anterior, hemos creado una clase llamada Greet con un campo mensaje . Dado que el campo está protegido internamente, podemos acceder a él desde el Programa clase ya que están en el mismo ensamblado.

Derivamos una clase de Greet en otro ensamblaje e intente acceder al campo interno protegido msg de ella.

// Code on Assembly2
using System;

// access Assembly1
using Assembly1;

namespace Assembly2 {

  // derived class of Greet
  class Program: Greet {
    static void Main(string[] args) {
      Program greet = new Program();

      // accessing name field from Assembly1
      Console.Write(greet.msg);
      Console.ReadLine();
    }
  }
}

Salida

Hello

El código anterior está en Assembly2 .

En el ejemplo anterior, hemos heredado el Program clase del Saludo clase (de Asamblea1 ).

// accessing name field from Assembly1
Console.Write(greet.msg);

Podemos acceder al msg del Saludo clase de Asamblea1 de Asamblea2 .

Esto se debe a que el msg es un campo interno protegido y estamos intentando acceder a él desde la clase secundaria de Greet .


6. modificador de acceso privado protegido

El private protected modificador de acceso es una combinación de private y protected . Está disponible desde la versión 7.2 de C# y posteriores.

Cuando declaramos un miembro private protected , solo se puede acceder dentro de la misma clase y su clase derivada dentro del mismo ensamblado. Por ejemplo,

// Code in Assembly1
using System;

namespace Assembly1 {
  public class StudentName {
    private protected string name = "Sheeran";
  }

  //derived class of StudentName class
  class Program1 : StudentName {

    static void Main(string[] args) {

      Program1 student = new Program1();

      //  accessing name field from base class
      Console.Write(student.name);
      Console.ReadLine();
    }
  }
}

Salida

Sheeran

El código anterior está en Asamblea1

En el ejemplo anterior, hemos creado una clase StudentName con un private protected campo nombre .

Observe que hemos heredado el Program1 clase del StudentName clase.

Desde el private protected se puede acceder al miembro desde clases derivadas dentro del mismo ensamblado, podemos acceder a name del Programa1 clase.

Derivamos una clase de StudentName en otro ensamblado e intente acceder al campo privado protegido nombre de eso. Por ejemplo,

// Code in Assembly2
using System;
//access Assembly1
using Assembly1;

namespace Assembly2 {

  //derived class of StudentName
  class Program : StudentName {
    static void Main(string[] args) {
      Program student = new Program();
    
      // accessing name field from Assembly1
      Console.Write(student.name);
      Console.ReadLine();
     }
  }
}

El código anterior está en Assembly2

En el ejemplo anterior, cuando intentamos acceder al nombre campo de la clase derivada de StudentName , obtenemos un error.

Error    CS0122    'StudentName.name' is inaccessible due to its protection level    

Esto se debe a que el nombre el campo está en Asamblea1 y la clase derivada está en Assembly2 .

Nota :También podemos usar modificadores de acceso con tipos (clases, interfaz, etc). Sin embargo, solo podemos usar tipos con modificadores de acceso público e interno.


Lenguaje C

  1. Clase y objeto de C#
  2. Palabra clave estática de C#
  3. Clase y método abstractos de C#
  4. Clase anidada de C#
  5. C# Clase parcial y método parcial
  6. Clase y método sellados de C#
  7. Plantillas de clase de C++
  8. Clase de almacenamiento C
  9. Java - Tipos de modificadores
  10. Polimorfismo en C++
  11. Abstracción de datos en C++