.NET Uzbekistan
  • .NET Uzbekistan
  • C# / .NET
    • .NET ga xush kelibsiz
    • .NET bilan bog'liq mavhumliklardan qochish
    • .NET asoslari
      • MSIL
      • Memory Management
        • Stack & Heap
      • CLR
    • Basics
      • Starter (boshlang'ich)
        • Java vs C#
        • C# Tarixi
        • Kirish
        • Visual Studio 2019
        • O'zgaruvchilar
        • Ma'lumot turlari
        • Operatorlar
        • Kalit so'zlar
        • ReadLine
        • If-else
        • Switch
        • Math sinfi
        • For sikl operatori
        • While sikl operatori
        • Do-While sikl operatori
        • Foreach sikl operatori
        • Break
        • Continue
        • Goto
        • Kommentlar
      • Essential (muhim)
        • Funksiya
        • Funksiyani qiymat orqali chaqirish
        • Funksiyada Ref kalit so'zidan foydalanish
        • Funksiyada Out parametri
        • Massiv
        • Funksiyalarda massivdan foydalanish
        • Ko'p o'lchamli massiv
        • Parametrlar
        • Array sinfi
        • CMD argumentlari
        • Obyekt va Class lar
        • Konstruktor
        • Obyektni ishga tushiruvchilar
        • Destructor
        • this
        • static
        • Struct
        • Enum
        • Property va Field lar
        • Vorislik
        • Overload (Qayta yuklash)
        • Override (Qayta yozish)
        • Base
        • Polimorfizm
        • Sealed
        • Interface
        • Modifikatorlarga ruxsat berish
        • Inkapsulatsiya
        • Abstrakt class va funksiyalar
        • String
        • StringBuilder
        • String Intern Pool
        • Exception Handling
        • try/catch
        • finally
      • Professional
        • To'plamlar
          • List
          • ArrayList
          • LinkedList
          • SortedList
          • Dictionary
          • HashTable
          • Stack
          • Queue
        • Tuple
        • ValueTuple
        • Delegatlar
          • Func delegati
          • Action delegati
          • Predicate delegati
          • Anonim metodlar
        • Hodisalar
        • Extension metodlar
        • Stream I/O
          • StreamWriter
          • StreamReader
          • MemoryStream
        • File va Directory
          • FileInfo
          • DirectoryInfo
        • MultiThread va Parallel dasturlash
        • Asinxron dasturlash
        • XML Document bilan ishlash
    • LINQ asoslari
      • Average
      • LINQ qanday ishlaydi?
      • LINQ query yozish usullari
      • IEnumerable va IQuerable
      • LINQ operatorlari
      • Select
      • SelectMany
      • Filterlash operatorlari
      • Where
      • OfType
      • Saralash operatorlari
      • OrderBy va OrderByDescending
      • ThenBy va ThenByDescending
      • Reverse
      • Miqdor operatorlari
        • All
        • Any
        • Contains
        • Min
        • Max
      • Set operatsiyasi
        • Distinct
        • Except
        • Intersect
        • Union
      • Bo'lim operatorlari
        • Take
        • TakeWhile
        • Skip
        • SkipWhile
      • Join operatorlari
        • Inner Join
        • Group Join
        • Left Join
      • Element operatsiyalari
        • ElementAt
        • First va FirstOrDefault
        • Last va LastOrDefault
        • Single va SingleOrDefault
    • ORM
      • ADO.NET
      • Dapper
      • Entity Framework
        • Entity Framework Approaches(usullar)
          • Model First Approach
          • Database First Approach
          • Code First Approach
        • Query yozish usullari(Entity Framework)
          • LINQ to SQL
          • Entity SQL
          • Native SQL
        • Entity Framework Core
    • Qo'shimcha sinflar
      • System.Text
        • Encoding
      • System
        • Int32
        • Random
        • DateTime
        • TimeSpan
      • System.Reflection
    • .NET Dasturchi
      • Clean Arxitektura
        • Clean Kod
        • Dizayn Tamoyillari
          • SOLID
            • Yagona Mas'uliyat Tamoyili(SRP)
            • Ochiq Yopiq Tamoyili(O/CP)
            • Liskovning Almashtirish Tamoyili(LSP)
            • Interfeysga ajratish tamoyili(ISP)
            • Qaramlik Inversiya Tamoyili(DIP)
          • DRY
          • KISS
          • YAGNI
        • Dizayn Patternlar
          • Factory Method
          • Abstract Factory
          • Builder
          • Prototype
          • Singleton
          • Adapter
          • Bridge
          • Composite
          • Decorator
          • Façade
          • Flyweight
          • Proxy
          • Chain of Responsibility
          • Command
          • Interpreter
          • Iterator
          • Mediator
          • Memento
          • Observer
          • State
          • Strategy
          • Visitor
          • Template Method
      • Git / Github
      • Muhim terminlar
      • Postman
      • CLI
        • CMD savodxonligi
      • API dan foydalanish
      • WCF
      • Refactor .NET application
      • Unit Test
      • TDD
      • TFS
    • Desktop Dasturlash
      • WPF (Windows Presentation Foundation)
        • WPF ga kirish
          • WPF ning ustunliklari
          • WPF da dastur
          • WPF arxitetkturasi
          • Klasslar iorarxiyasi
        • XAML
          • XAML asoslari
          • XAML orqasida kod
          • XAML xususiyatlari
          • XAML belgilash kengaytmalari
          • Biriktirilgan xususiyatlar
          • XAML da hodisalar
          • XAML da nomlar fazosi
        • WPF ilovasini tuzish
          • Komponovka
          • StackPanel
          • WrapPanel
          • DockPanel
          • Grid
          • GridSplitter
          • Umumiy o'lchamli guruhlar
          • Canvas
          • LnkCanvas
          • Komponovkaga misollar
        • Bog'liqlik xususiyatlari (Dependency property)
          • Bog'liqlik xususiyatlari
          • Bog'liqlik xususiyatlarining roli
          • Bog'liqlik xususiyatlarining aniqlanishi
          • Bog'liqlik xususiyatlarini ishlatish
        • Marshrutlangan hodisalar (Routed Events)
          • Routed Events
          • Bubble Events
          • Direct Events
          • Tunneling Events
        • Qo'shimcha ma'lumotlar
          • WPF ga kirish
          • WinForm va WPF
          • Salom WPF
          • XAML nima?
          • Hodisalar
          • WPF oynasi
          • App.xaml
          • Resurslar
          • Argument berish
          • Son va Vaqtni Formatlash
          • TextBlock elementi – Inline formatlash
          • Label elementi
          • Textbox elementi
      • WinForm (Windows Form)
        • 1-dars. Forma yaratish
        • 2-dars. Muhit bilan tanishish
        • 3-dars. Formaga komponentalar joylashtirish
        • 4-dars. Xodisa(Event)larni boshqarish
        • 5-dars. Dasturni ishga tushurish
      • UWP (Universal Windows Platform)
      • Xamarin
    • Web Dasturlash
      • ASP.NET Core asoslari
        • ASP.NET Core haqida
        • Loyihalar turlari
        • ASP.NET Core dasturlarini hosting qilish
        • Middleware tushunchasi
        • Middleware bilan amaliyot
        • Statik fayllar bilan ishlash
        • Dependency Injection
        • Developer Exception Page
      • ASP.NET Core Web API
        • Web API ga kirish
        • Swagger nima?
        • Http metodlar
        • ActionResult
        • CORs
        • Security (JWT)
        • Swagger ni sozlash
        • Filter va atributlar
        • Configuration va middleware
        • Logging
        • Mapping (AutoMapper)
        • SignalR
        • Keshlash
      • ASP.NET Core MVC
        • MVC nima?
        • ASP.NET Core MVC haqida qisqacha
        • Loyiha strukturasi
        • Controller
        • View
        • Model
        • View larni aniqlash yo'llari
        • Controller dan view ga ma'lumot uzatish
        • ViewBag va ViewData
        • Strongly typed View
        • Layout view haqida
        • ViewStart va ViewImports fayllari haqida
        • Marshrutizatsiya (routing)
        • Tag Helpers
          • Anchor Tag Helper
          • Image Tag Helper
          • Environment Tag Helper
        • Tekshiruv qoidalari (Validation rules)
      • MicroServices
    • Mobile Dasturlash
      • Xamarin.Android
      • Xamarin.IOS
      • Xamarin.Forms
    • Game Dasturlash
      • Unity Starter (boshlang'ich)
      • Unity Advanced (rivojlangan)
    • Internet of Things
    • Machine Learning
    • Telegram Bot
      • Kirish
        • Telegram bot bilan tanishuv
        • ASP.NET Core da birinchi telegram bot
      • Starter
        • Xabar turlari va xabar yuborish
          • Matnli xabarlar bilan ishlash
          • Rasm & Sticker
          • Audio & voice
          • Video & Video Note
          • Dokument fayllar
          • Polls
          • Contact , Location, Venue
          • Album(Media Group)
      • Essential
        • Reply - Markup
          • ReplyKeyboardMarkup, KeyboardButton
          • InlineKeyboardMarkup, InlineKeyboardButton
      • Advanced
        • Deployment
    • Class Library
    • Intervyu savollari
      • C# / .NET asoslari
  • Database
    • MS SQL Server
      • SQL Server sintaksisi
      • Ma'lumot turlari
      • Select
    • PostgreSQL
      • Basic
        • Kirish
        • PostgreSQL tarixi
        • Muhitni sozlash (PgAdmin)
        • Sistaksis
        • Ma'lumot turlari
        • Create Database
        • Select Database
        • Drop Database
        • Create Table
        • Drop Table
        • Scheme
        • Insert so'rovi
        • Select so'rovi
        • Operatorlar
        • Ifodalar
        • Where
        • Where
        • And va Or
        • Update so'rovi
        • Delete so'rovi
        • Like
        • Limit
        • Order By
        • With
        • Having
        • Distinct
      • Advance
        • Constraint (cheklov) lar
        • Join lar
          • Cross join
          • Inner join
          • Left join
          • Right join
          • Full join
        • Union
  • Roadmap
    • Roadmap for .NET developers
    • Roadmap for Azure developers
Powered by GitBook
On this page
  • Ruxsat modifikatorlari
  • Ahamiyati
  • Turlari
  • Standart ruxsat modifikatori

Was this helpful?

  1. C# / .NET
  2. Basics
  3. Essential (muhim)

Modifikatorlarga ruxsat berish

Buzurgmexr Sultonaliyev

Ruxsat modifikatorlari

Ruxsat modifikatorlari - class, record, struct, interface va uning a'zolari, enum-ga qo'shiladigan kalit so'zlar bo'lib, ularning ko'rinishini va asosan ulardan qayerda foydalanish mumkinligini belgilaydi. Ushbu kalit so'zlar bizga inkapsulyatsiyani saqlashga va tasodifiy o'zgarishlarning oldini olishga yordam beradi, shu bilan kodimizni toza va xavfsiz saqlaydi.

Ahamiyati

Ruxsat modifikatorlaridan strategik foydalanish quyidagi sabablarga ko'ra C# da juda muhim:

  • Bu yaxshi tuzilgan kodni ta'minlab, inkapsulyatsiya tamoyillariga rioya qilishga yordam beradi.

  • Bu obyektning ichki holatini qasddan o'zgartirishning oldini oladi.

  • U ilovaning turli qatlamlari o'rtasida qanday foydalanishni belgilab beradi.

Shunday qilib, ruxsat modifikatorlarining kuchidan foydalanishga tayyormisiz? Keling, har xil turlarni ko'rib chiqaylik!

Turlari

C# har biri o'ziga xos funksionallikka ega bo'lgan oltita ruxsat modifikatorini taklif qiladi. Keling bularga kirishdan oldin solution va csproj degan tushunchalarga oydinlik kiritsak.

  • solution - Visual Studio-da dastur yaratishda yoki boshqa C# loyihasini boshlashda ishlatiladi. Solution, bir yoki bir nechta proyektlarni birlashtiradi. Agar sizning loyihangizda bir nechta proyektlar (masalan, web ilovalar, desktop ilovalar, test proyektlar...) bo'lsa, ularni bir-biriga bog'lash va bir bosh sahifa orqali barchasiga nazorat qilish uchun solution yaratishimiz mumkin.

  • csproj - har bir C# proyekti, u tilda joylashgan direktoriyada joylashgan, proyektning asosiy fayli csproj fayli orqali nazorat qilinadi. Bu faylda proyektning qanday ma'lumotlarni, qaysi fayllarni, klasslarni, boshqa proyektlar bilan bog'lanishni, ilova versiyasini va ko'p boshqa sozlamalarni o'z ichiga olgan. Csproj fayli, proyekt yaratish, tarqatish va ishga tushirish jarayonlarini boshqarish uchun ishlatiladi.

Agar siz bitta loyihadagi bir nechta proyektlarni birlashtirishni xohlasangiz, siz barchasini o'z ichiga oladigan bir solution fayli yaratishingiz mumkin. Solution fayli sizning barcha proyektlaringizni boshqarish, ular orasida aylanish va ularga qo'shimcha sozlamalar qo'shish imkoniyatini beradi.

Masalan, bir loyihaning tuzilishi quyidagicha ko'rinadi:

MySolution/
  ├── MyConsoleApp/
  │     ├── Program.cs
  │     └── MyConsoleApp.csproj
  ├── MyLibrary/
  │     ├── MyClass.cs
  │     └── MyLibrary.csproj
  └── MySolution.sln

Bu yerda MySolution.sln - bu solution fayli, MyConsoleApp.csproj va MyLibrary.csproj - bu esa proyektlarning csproj fayllari.

public

public (umumiy ruxsat modifikatori) - bu kalit so'z orqali yaratilgan class, record, struct, interface va uning a'zolarini butun solution bo'yicha ishlatishga ruxsat beradi. Ya'ni biz solution ichidagi hamma proyektlarda ishlatish imkoniga ega bo'lamiz

public class Hayvon
{
  public string Nom; // Umumiy ruxsat modifikatori ishlatilgan.

  public void Gapir()
  {
    Console.WriteLine("Salom, mening ismim " + Nom);
  }
}

class Program
{
  static void Main(string[] args)
  {
    Hayvon meningHayvonim = new Hayvon();

    // "Nom" umumiy a'zosiga shu yerdan kirishingiz mumkin.
    meningHayvonim.Nom = "Oybola";
    meningHayvonim.Gapir(); // Chiqish: Salom, mening ismim Oybola
  }
}

internal

internal (ichki ruxsat modifikatori) - bu kalit so'z orqali yaratilgan class, record, struct, interface va uning a'zolarini butun proyekt bo'yicha ishlatishimiz mumkin bo'ladi. Solution dagi boshqa proyektlarda foydalana olmaymiz.

Keling bitta BirinchiDastur degan proyekt yaratamiz va unda bitta sinf yaratamiz:

namespace BirinchiDastur;

public class Nuqta
{
  internal int x;
  internal int y;

  public Nuqta Namuna()
  {
    Nuqta p = new Nuqta();
    return p;
  }
}

Yuqorida Nuqta nomli sinf yaratdik. Uning x va y degan xususiyatlariga internal ruxsat modifikatori berilgan. Va Namuna nomli metod yaratdik. Bu metod bizga shu sinfdan namuna olib qaytaradi.

Ana endi shu yaratgan sinfimizni boshqa proyektdan turib ishlatmoqchi bo'lsak quyidagicha ko'rinishda bo'ladi:

using BirinchiDastur;

class BoshqaDastur
{
  static void Main()
  {
    Nuqta nuqta = new Nuqta();
    nuqta.Namuna();

    //Console.WriteLine(nuqta.x); // Kompilyatsiya vaqtida xato
    // "Nuqta.x" ga himoya darajasi tufayli kirish imkonsiz
  }
}

Ya'ni, Nuqta sinfining x va y xususiyatlari internal bo'lganligi uchun ham uni boshqa proyektda ishlatishga ruxsat yo'q. Lekin Nuqta sinfining Namuna nomli metodi public bo'lganligi uchun bemalol ishlatish imkoniyatiga egamiz.

protected

protected (himoyalangan ruxsat modifikatori) - bu kalit so'z orqali yaratilgan class (yoki record) a'zolarini shu class(yoki record) dan voris olingan class (yoki record) ichidagina foydalanishimiz mumkin.

class Hayvon
{
  protected string tovush; // Himoyalangan ruxsat modifikatori ishlatilgan.

  public Hayvon(string hayvonTovushi)
  {
    tovush = hayvonTovushi;
  }
}

class It : Hayvon
{
  public It(string itTovushi) : base(itTovushi) { }

  public void Vovilla()
  {
    Console.WriteLine("It deydi " + tovush); // Biz ushbu olingan sinfdagi himoyalangan a'zo "tovush" ga kira olamiz.
  }
}

class Program
{
  static void Main(string[] args)
  {
    It meningItim = new It("Vav!");
    meningItim.Vovilla(); // Chiqish: It deydi Vav!
  }
}

private

private (shaxsiy ruxsat modifikatori) - bu kalit so'z orqali yaratilgan class, record, struct va uning a'zolarini faqat shu class, record, struct-ning ichidagina foydalanish huquqini beradi. (Interface a'zolari uchun bu ruxsat modifikatorini qo'llay olmaymiz.)

class Hayvon
{
  private int yosh; // Shaxsiy ruxsat modifikatori ishlatilgan.

  public void YoshniOrnat(int yangiYosh)
  {
    yosh = yangiYosh;
  }

  public int YoshniOl()
  {
    return yosh;
  }
}

class Program
{
  static void Main(string[] args)
  {
    Hayvon meningHayvonim = new Hayvon();

    // Siz to'g'ridan-to'g'ri boshqa sinfdan "age" shaxsiy a'zosiga kira olmaysiz.
    // myAnimal.age = 4; // Bu kompilyatsiya vaqtida xatolikka olib keladi.

    // Buning o'rniga, shaxsiy a'zolarga kirish uchun umumiy ruxsat etilgan metodlardan foydalanishingiz kerak.
    meningHayvonim.YoshniOrnat(4);
    Console.WriteLine("Yosh: " + meningHayvonim.YoshniOl()); // Chiqish: Yosh: 4
  }
}

protected internal

protected internal (himoyalangan ichki ruxsat modifikatori) - bu kalit so'z orqali yaratilgan class, record, interface va ularning a'zolarini shu va boshqa proyektda shu class, record yoki interface dan voris olgandagina ishlatish imkonini beradi.

Keling yuqorida yaratgan Nuqta nomli sinfimizga o'zgartirish kiritsak:

namespace BirinchiDastur;

public class Nuqta
{
  protected internal int x;
  protected internal int y;

  public Nuqta Namuna()
  {
    Nuqta p = new Nuqta();
    return p;
  }
}

Yuqorida x va y nomli xususiyatlarimizga protected internal ruxsat modifikatorini berdik.

Uni BoshqaDastur nomli proyektimizda quyidagicha ishlatishimiz mumkin:

using BirinchiDastur;

class BoshqaDastur: Nuqta
{
  static void Main()
  {
    Nuqta nuqta = new Nuqta();
    nuqta.Namuna();

    //Console.WriteLine(nuqta.x); // Kompilyatsiya vaqtida xato
    // "Nuqta.x" ga himoya darajasi tufayli kirish imkonsiz

    BoshqaDastur boshqaDastur = new BoshqaDastur();
    boshqaDastur.Namuna();

    Console.WriteLine(boshqaDastur.x);
    Console.WriteLine(boshqaDastur.y);
  }
}

Ya'ni, Nuqta sinfining x va y xususiyatlari protected internal bo'lganligi uchun ham uni boshqa proyektda to'ridan-to'g'ri ishlata olmaymiz. Kompilyatsiya vaqtida xatolik qaytaradi. Lekin Nuqta nomli sinfimizdan voris oladigan bo'lsak va uning vorisidan namuna olsak, protected internal ruxsat modifikatori ana o'sha namunada x va y nomli xususiyatlarimizni ishlatishga imkon beradi.

private protected

private protected (himoyalangan shaxsiy ruxsat modifikatori) - bu kalit so'z orqali yaratilgan class, record, interface va ularning a'zolarini shu proyektda, shu class, record, interface-dan voris olgandagina ishlatish imkonini beradi.

Bunda Nuqta nomli sinfimiz quyidagi holatga keladi:

namespace BirinchiDastur;

public class Nuqta
{
  private protected int x;
  private protected int y;

  public Nuqta Namuna()
  {
    Nuqta p = new Nuqta();
    return p;
  }
}

class TogriChiziq: Nuqta
{ 
  public TogriChiziq(int x, int y)
  {
    this.x = x;
    this.y = y;
  }
}

Yuqorida Nuqta nomli sinf joylashgan proyektda ‌TogriChiziq nomli yangi sinf yaratdik va Nuqta sinfidan voris oldik. Shu holatda Nuqta sinfining x va y xususiyatlaridan foydalanishimiz mumkin bo'ladi

Ana endi shu yaratgan sinfimizni boshqa proyektdan turib ishlatmoqchi bo'lsak quyidagicha ko'rinishda bo'ladi:

class BoshqaDastur : Nuqta
{
  static void Main()
  {
    Nuqta nuqta = new Nuqta();
    nuqta.Namuna();

    //Console.WriteLine(nuqta.x); // "Nuqta.x" ga himoya darajasi tufayli kirish imkonsiz

    BoshqaDastur boshqaDastur = new BoshqaDastur();
    boshqaDastur.Namuna();

    //Console.WriteLine(boshqaDastur.x); // "Nuqta.x" ga himoya darajasi tufayli kirish imkonsiz
    //Console.WriteLine(boshqaDastur.y); // "Nuqta.x" ga himoya darajasi tufayli kirish imkonsiz
  }
}

Ya'ni, Nuqta sinfining x va y xususiyatlari private protected bo'lganligi uchun ham uni boshqa proyektda ishlatishga ruxsat yo'q.

Standart ruxsat modifikatori

Agar biz enum va class, record, struct, interface va ularning a'zolariga hech qanday ruxsat modifikatorlarini qo'llamasak, ular avvalboshdan o'rnatilgan ruxsat modifikatorlarini qabul qiladi. Ular quyidagi jadvalda aks ettirilgan:

PreviousInterfaceNextInkapsulatsiya

Last updated 1 year ago

Was this helpful?