Uvod u Access Modifiers u C #

Ovaj članak pokriva najelementarniji koncept objektno orijentiranog programiranja iz perspektive programskog jezika C #. Koncept je poznat kao - Modifikatori pristupa. Prvo pitanje na koje treba odgovoriti glasi - što su moderi za izmjenu pristupa? Jednostavno rečeno, modifikatori pristupa kontroliraju kojima objektima / varijablama / konstantama / metodama (praktički sve) može se pristupiti u kojem dijelu koda. Modifikatori pristupa igraju važnu ulogu u dokazivanju koncepta apstrakcije u objektno orijentiranom programiranju. Oni kontroliraju koji dio programa treba biti, a ne trebaju biti vidljivi krajnjem korisniku. Naravno, krajnjeg korisnika najmanje brinu konstante i varijable koje su uključene u algoritam. Njega je samo briga koju metodu treba iskoristiti da bi se dobio izlaz.

Vrste modifikatora pristupa u C #

C # pruža nam četiri vrste modifikatora pristupa:

  • Privatno (zadani modifikator pristupa, osim enuma i sučelja)
  • Zaštićeno (malo ograničeno)
  • Javno (neograničeno, zadani izbor za enume i sučelja)
  • Interni (javni unutar iste skupštine)

Osim ove četiri modifikatora pristupa, postoje još dvije kombinacije razine pristupa -

  • Zaštićeno unutarnje
  • Privatno zaštićeno

Razjasnimo svako s primjerom.

1. privatno

Privatni je najniža razina pristupa. To je također zadani modifikator pristupa za sve konstante, varijable, korisnički definirane objekte itd. Samo su enumi i sučelja prema zadanim postavkama javni. Dakle, ako ne odredite neki modifikator pristupa, C # dodijeli mu zadani modifikator.

Privatni objekti nisu dostupni izvan tijela klase ili strukture ili programskog odjeljka u kojem su deklarirani. Svaki pokušaj pristupa objektu izvan dosega tijela u kojem je proglašen rezultira greškom u vremenu sastavljanja.

Primjer 1

using System;
class Employee //private by default
(
string name; //private by default
public string GetName()
(
return name;
)
public void SetName(string name)
(
this.name = name;
)
)
public class Program
(
public static void Main()
(
Employee emp = new Employee();
emp.SetName("John");
Console.Write("Employee name is " + emp.GetName());
// compile time error - 'Employee.name' is inaccessible due to its protection level
// Console.Write("Employee name is " + emp.name);
)
)

Izlaz 1:

Primjer 2

using System;
public class Program
(
public static void Main()
(
int x = 5; //private to the Main method, accessible inside nested code blocks in the Main method
if (true)
(
int y = 10; //private to the if block, not accessible outside if block
Console.WriteLine("x = " + x);
Console.WriteLine("y = " + y);
)
Console.WriteLine("x = " + x);
// compile-time error - The name 'y' does not exist in the current context.
// Console.WriteLine("y = " + y);
)
)

Izlaz 2:

2. zaštićen

Zaštićeni pristupni specifikator ograničava da objekt bude dostupan samo iz izvedenih instanci klase. Dakle, ako objekt podređene klase pokušava pristupiti zaštićenim objektima roditeljske klase, to je dozvoljeno. Klase koje nisu izvedene ne mogu pristupiti zaštićenim članovima bilo koje klase. Naravno, zaštićeni su objekti dostupni metodama vlastite klase.

Primjer

using System;
class Parent
(
protected string x;
public Parent()
(
x = "abc"; //accessible to own class methods
)
)
class Child : Parent // derived class
(
public static void Main()
(
var parentObj = new Parent();
var childObj = new Child();
Console.WriteLine(childObj.x); //accessible to derived class object instances
// compile-time error - Cannot access protected member 'Parent.x' via a qualifier of type 'Parent'; the qualifier must be of type 'Child' (or derived from it)
// Console.WriteLine(parentObj.x);
)
)

Izlaz 3:

3. Javni

Ovo je najmanje ograničen modifikator pristupa. Javni su objekti praktički dostupni cijelom vanjskom svijetu, što ga čini najvećim dopuštenim modifikatorom pristupa. Naravno, to dolazi uz veliku cijenu - trošak najmanje zaštite.

Javnim članovima može se pristupiti na bilo kojem dijelu koda. To ih čini najmanje sigurnim. Bilo koja logika koda može izmijeniti njihovu vrijednost što može dovesti do neočekivanog ponašanja. Dakle, prije stavljanja u javnost bilo koji predmet mora biti vrlo oprezan.

U istoj klasi zaposlenika koju smo stvorili u našem primjeru modifikatora privatnog pristupa, ako promijenimo razinu pristupa u javnu, ne bi nam trebale nikakve Getter i Setter metode. U stvari, najbolja praksa je da objekt učinite privatnim i koristite C # Getter i Setter svojstva.

Primjer

using System;
class Employee
(
public string name;
)
public class Program
(
public static void Main()
(
Employee emp = new Employee();
emp.name = "John";
Console.Write("Employee name is " + emp.name);
)
)

Izlaz 4:

4. unutarnji

Unutarnji su predmeti i metode dostupni samo unutar istog sklopa. Ovo je vrlo koristan modifikator pristupa kad želite bilo koji objekt učiniti javnim, a ipak želite ograničiti njegov pristup samo na okvir koji kodirate.

Dakle, u suštini su svim unutarnjim objektima dostupna sva područja istog sklopa.

Napravimo dvije aplikacije za konzole kako bismo razumjeli kako ovo funkcionira.

Primjer

Korak 1: Kreirajte aplikaciju za konzole C # i u nju stavite donji kôd:

using System;
namespace ConsoleApp1
(
public class Parent
(
internal int x;
public Parent()
(
x = 10;
)
)
public class Program
(
public static void Main()
(
var parentObj = new Parent();
// accessible within the same assembly
Console.Write("The value of x = " + parentObj.x);
)
)
)

Korak 2: Izgradite rješenje za dobivanje .dll datoteke iz bin mape.

Korak 3: Napravite drugu aplikaciju za konzolu i referencirajte montažnu datoteku iz ConsoleApp1. Kliknite na Dodaj referencu na donjoj slici i potražite mjesto .dll datoteke iz koraka 2. Mora biti slična ~ / ConsoleApp1 / bin / Debug / ConsoleApp1.dll.

Nakon dodavanja .dll datoteke, trebali biste je pronaći pod skupštinom.

4. korak : Stavite donji kôd u ConsoleApp2.

using System;
using ConsoleApp1; //referencing the first assembly
namespace ConsoleApp2
(
class Program
(
static void Main(string() args)
(
var parentObj = new Parent();
//not accessible outside the assembly
Console.Write(parentObj.x);
)
)
)

Korak 5: Kada napravite ConsoleApp2, dobili biste pogrešku u sastavljanju vremena koja pokazuje da 'x' iz ConsoleApp1 ne može pristupiti u drugim sklopovima zbog razine zaštite.

5. Zaštićeno unutarnje

Ovo je kombinacija izmjenjivača zaštićenog i internog pristupa. Važan koncept koji ovdje treba shvatiti je da zaštićeni unutarnji znači zaštićeni ili unutarnji. To je unija oba modifikatora pristupa. Nikad se ne smije misliti da je to raskrižje.

Dakle, unutarnji objekti nisu dostupni izvan skupa, dok su zaštićeni objekti dostupni bilo kojoj izvedenoj klasi u bilo kojem sklopu. Što ako želim zaštititi svoj objekt samo u drugim sklopovima, a ne u istoj skupštini? Jednostavno rješenje - proglasite ga zaštićenim internim.

Primjer

Korak 1: Izmijenimo naš ConsoleApp1 kako bismo odražavali kôd u nastavku. Napominjemo da smo promijenili razinu pristupa našoj varijabli 'x' u zaštićeni interni.

using System;
namespace ConsoleApp1
(
public class Parent
(
protected internal int x;
public Parent()
(
x = 10;
)
)
public class Program
(
public static void Main()
(
var parentObj = new Parent();
// accessible within the same assembly
Console.Write("The value of x = " + parentObj.x);
)
)
)

Korak 2: Ponovo izgradite rješenje i zamijenite .dll u ConsoleApp2 s ažuriranim.

Korak 3: Ažurirajte kôd u ConsoleApp2 na sljedeći način:

using System;
using ConsoleApp1; //referencing the first assembly
namespace ConsoleApp2
(
class Program: Parent
(
static void Main(string() args)
(
var progObj = new Program();
//accessible only via an object of the derived class.
Console.Write(progObj.x);
Console.Read();
)
)
)

Korak 4: Pokrenite ConsoleApp2 da biste vidjeli izlaz.

6. Privatno zaštićeno

Ovo je sindikalna kombinacija privatnih i zaštićenih modifikatora pristupa. Zaštićeno unutarnje sredstvo zaštićeno ILI unutarnje. Dakle, Privatni objekti nisu dostupni izvan bloka koda u kojem je deklariran, dok su Zaštićeni objekti dostupni bilo kojoj izvedenoj klasi u bilo kojem sklopu. Što ako želim ograničiti pristup objektu čak i na izvedenim klasama u drugim sklopovima? Jednostavno rješenje - proglasite ga zaštićenim internim.

Primjer

Promijenimo razinu pristupa "x" u ConsoleApp1 na Privatno zaštićeno.

using System;
namespace ConsoleApp1
(
public class Parent
(
private protected int x;
public Parent()
(
x = 10;
)
)
public class Child: Parent (
public void DisplayX() (
// accessible only via derived class objects
Console.Write("Value of x = " + x);
)
)
public class Program
(
public static void Main()
(
var childObj = new Child();
childObj.DisplayX();
Console.Read();
)
)
)

Izlaz:

Tablična usporedba

Specifikator pristupa Ista Skupština Ostala Skupština
Isti razredIzvedena klasaKlasa bez izvedenicaIzvedena klasaKlasa bez izvedenica
PrivatnaDaNeNeNeNe
JavnostDaDaDaDaDa
zaštićenDaDaNeDaNe
interniDaDaDaNeNe
Zaštićeno unutarnjeDaDaDaDaNe
Privatno zaštićenoDaDaNeNeNe

Zaključak

Vidjeli smo u gornjem članku da modifikatori pristupa kontroliraju pristup svemu projektu. Različite kombinacije razina pristupa pokrivaju potrebe različitih vrsta pristupačnosti. Programeri moraju odabrati mudro imajući u vidu sigurnost i apsolutnu potrebu da im objekt bude dostupan u određenom bloku koda.

Preporučeni članci

Ovo je vodič za Modifikatore pristupa u C #. Ovdje smo raspravljali o Uvodnim vrstama Modifikatora pristupa u C #, zajedno s primjerima i izlazima. Možete i proći kroz naše druge predložene članke da biste saznali više -

  1. C # sastavljači
  2. Destruktor u C #
  3. Što je TypeScript?
  4. Što su ASP.Net Web Services?
  5. Pristupite modifikatorima na PHP-u
  6. Rad i top 3 enum metode u C #

Kategorija: