Увод у Модификаторе приступа у Ц #

Овај чланак покрива најелементарнији концепт објектно оријентисаног програмирања из угла програмског језика Ц #. Концепт је познат као - Модификатори приступа. Прво питање на које треба одговорити јесте - Шта су Модификатори приступа? Једноставно речено, модификатори приступа контролирају којим објектима / варијаблама / константама / методама (практично све) се може приступити у којем дијелу кода. Модификатори приступа играју важну улогу у доказивању концепта апстракције у објектно оријентисаном програмирању. Они контролирају који би дио програма требао бити, а не би требао бити видљив крајњем кориснику. Наравно, крајњег корисника најмање брину константе и променљиве које су укључене у алгоритам. Забринуто је само за коју методу треба да се користи да би добио излаз.

Врсте модулатора приступа у Ц #

Ц # пружа нам четири врсте модификатора приступа:

  • Приватно (подразумевани модификатор приступа, осим енума и интерфејса)
  • Заштићено (благо ограничено)
  • Јавно (неограничено, задани избор за енуме и интерфејсе)
  • Интерни (јавни унутар исте скупштине)

Поред ове четири модификатора приступа, постоје још две комбинације нивоа приступа -

  • Заштићено унутрашње
  • Приватно заштићено

Разумејмо свако са примером.

1. Приватно

Приватни је најнижи ниво приступа. Такође је подразумевани модификатор приступа за све константе, променљиве, кориснички дефинисане објекте, итд. Само енуми и интерфејси су подразумевано јавни. Дакле, ако не одредите неки модификатор приступа, Ц # додељује му задати модификатор.

Приватни објекти нису доступни изван тела класе или структуре или програмског одељка у којем су декларисани. Сваки покушај приступа објекту изван домета тела у коме је декларисан резултира грешком у времену превођења.

Пример # 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);
)
)

Излаз 1:

Пример бр. 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);
)
)

Излаз 2:

2. Заштићено

Заштићени приступни спецификатор ограничава приступ објекту само из изведених инстанци класе. Дакле, ако објект дечије класе покушава приступити заштићеним објектима родитељске класе, то је дозвољено. Неизведене класе не могу приступити заштићеним члановима било које класе. Наравно, заштићени објекти су доступни методама сопствене класе.

Пример

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);
)
)

Излаз 3:

3. Јавни

Ово је најмање ограничени приступ модификатор. Јавни објекти су практично доступни целом спољном свету, што га чини највишим дозвољеним модификатором приступа. Наравно, ово долази уз велику цену - трошак најмање заштите.

Јавним члановима може се приступити било којим делом кода. То их чини најмање безбедним. Било која логика кода може изменити њихову вредност што може довести до неочекиваног понашања. Дакле, треба бити врло опрезан пре него што било који објекат објави у јавности.

У истој класи запосленика коју смо креирали у нашем примјеру модификатора приватног приступа, ако промијенимо ниво приступа у јавни не би нам биле потребне Геттер и Сеттер методе. У ствари, најбоља пракса је да објект учините приватним и користите Ц # Геттер и Сеттер својства.

Пример

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);
)
)

Излаз 4:

4. Интерни

Унутрашњи објекти и методе су доступни само унутар истог склопа. Ово је веома користан модификатор приступа када желите да било који објекат учините јавним, а ипак желите да ограничите његов приступ само на оквир који кодирате.

Дакле, у суштини, свим унутрашњим објектима су приступачне све области истог склопа.

Направимо две конзоле да бисмо разумели како ово функционише.

Пример

1. корак: Креирајте апликацију за конзоле Ц # и у њу ставите доњи код:

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);
)
)
)

Корак 2: Направите решење за добијање .длл датотеке из бин мапе.

Корак 3: Направите другу апликацију за конзолу и референцирајте монтажну датотеку из ЦонсолеАпп1. Кликните на Додај референцу на доњој слици и потражите локацију .длл датотеке из корака 2. Мора бити слична ~ / ЦонсолеАпп1 / бин / Дебуг / ЦонсолеАпп1.длл.

Након додавања .длл датотеке, требало би да је пронађете под скупштином.

4. корак: Ставите доњи код у ЦонсолеАпп2.

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);
)
)
)

Корак 5: Када саставите ЦонсолеАпп2, добили бисте грешку у времену компилације што указује да 'к' из ЦонсолеАпп1 не може да се приступи у другим склоповима због нивоа заштите.

5. Заштићено унутрашње

Ово је комбинација и заштићених и унутрашњих модификатора приступа. Важан концепт који овдје треба схватити је да заштићени унутрашњи значи заштићени или унутрашњи. То је заједница оба модификатора приступа. Никада се не сме мислити да је то раскрсница.

Дакле, Унутрашњи објекти нису доступни изван склопа, док су Заштићени објекти доступни било којој изведеној класи у било којем склопу. Шта ако желим заштитити свој објект само у другим склоповима, а не у истој склопи? Једноставно решење - прогласите га интерним заштићеним.

Пример

Корак 1: Измените наш ЦонсолеАпп1 да би одражавао код доле. Имајте на уму да смо променили ниво приступа променљивој „к“ у заштићени интерни.

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);
)
)
)

Корак 2: Поново изградите решење и замените .длл у ЦонсолеАпп2 са ажурираним.

Корак 3: Ажурирајте код у ЦонсолеАпп2 на следећи начин:

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();
)
)
)

Корак 4: Покрените ЦонсолеАпп2 да бисте видели излаз.

6. Приватно заштићено

Ово је синдикална комбинација и приватних и заштићених модификатора приступа. Заштићено унутрашње средство Заштићено ИЛИ Унутрашње. Дакле, Приватни објекти нису доступни изван блока кода у којем је декларисан, док су Заштићени објекти доступни било којој изведеној класи у било којем склопу. Шта ако желим ограничити приступ објекту чак и на изведеним класама у другим склоповима? Једноставно решење - прогласите га интерним заштићеним.

Пример

Променимо ниво приступа „к“ у ЦонсолеАпп1 на Привате Протецтед.

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();
)
)
)

Излаз:

Табела поређења

Аццесс Специфиер Иста скупштина Друга скупштина
Иста класаИзведена класаНеизведена класаИзведена класаНеизведена класа
ПриватнидаНеНеНеНе
Јавнодадададада
ЗаштићенодадаНедаНе
ИнтернидададаНеНе
Заштићено унутрашњедадададаНе
Приватно заштићенодадаНеНеНе

Закључак

У горњем чланку смо видели да модификатори приступа контролирају приступ свему пројекту. Различите комбинације нивоа приступа покривају потребе различитих врста приступачности. Програмери морају одабрати мудро имајући у виду сигурност и апсолутну потребу да им објект буде доступан у одређеном блоку кода.

Препоручени чланци

Ово је водич за Модификаторе приступа у Ц #. Овде смо расправљали о Уводним врстама Модификатора приступа у Ц #, заједно са примерима и излазима. Можете и да прођете кроз друге наше предложене чланке да бисте сазнали више -

  1. Ц # компајлери
  2. Деструктор у Ц #
  3. Шта је ТипеСцрипт?
  4. Шта је АСП.Нет Веб Сервицес?
  5. Приступите модификаторима на ПХП-у
  6. Рад и топ 3 Енум методе у Ц #

Категорија: