"Enter"a basıp içeriğe geçin

C# Erişim Belirleyiciler (Access Modifiers) Nedir? 5 Adet Erişim Belirleyici Nasıl Kullanılır?

Merhaba, bu yazıda C# Erişim Belirleyiciler (Access Modifiers) konusunu anlatacağım. Access Modifiers, bir sınıf, yapı, arayüz, yöntem, özellik veya alanın başka bir kod parçasından erişilebilirliğini belirlemek için kullanılan anahtar kelimelerdir. C# dilinde 5 adet Access Modifier vardır: public, private, protected, internal ve protected internal.

Public Access Modifier

Bu anahtar kelime ile tanımlanan bir üye, tanımlandığı sınıfın dışında da herhangi bir kod parçasından erişilebilir. Örneğin:

public class Person {
    public string Name; // public alan
    public int Age; // public alan
    
    public void Greet() { // public yöntem

        Console.WriteLine("Hello, my name is " + Name + " and I am " + Age + " years old.");
    }
}

class Program {
    static void Main(string[] args) {
        Person p = new Person(); // Person sınıfından bir nesne oluşturduk
        p.Name = "Ali"; // public alanlara erişebiliyoruz
        p.Age = 25;
        p.Greet(); // public yönteme erişebiliyoruz
    }
}

Private Access Modifier

Bu anahtar kelime ile tanımlanan bir üye, sadece tanımlandığı sınıf içinde erişilebilir. Başka bir sınıf veya kod parçasından erişilemez. Örneğin:

public class Person {
    private string Name; // private alan
    private int Age; // private alan
    
    private void Greet() { // private yöntem
    
        Console.WriteLine("Hello, my name is " + Name + " and I am " + Age + " years old.");
    }
}

class Program {
    static void Main(string[] args) {
        Person p = new Person(); // Person sınıfından bir nesne oluşturduk
        p.Name = "Ali"; // private alanlara erişemiyoruz, hata alırız
        p.Age = 25;
        p.Greet(); // private yönteme erişemiyoruz, hata alırız
    }
}

Protected Access Modifier

Bu anahtar kelime ile tanımlanan bir üye, tanımlandığı sınıf ve bu sınıftan türetilen alt sınıflar içinde erişilebilir. Başka bir sınıf veya kod parçasından erişilemez. Örneğin:

public class Person {
    protected string Name; // protected alan
    protected int Age; // protected alan

    protected void Greet() { // protected yöntem
        Console.WriteLine("Hello, my name is " + Name + " and I am " + Age + " years old.");
    }
}

public class Student : Person { // Student sınıfı Person sınıfından türedi
    public void Introduce() { // public yöntem
        Greet(); // protected yönteme erişebiliyoruz, çünkü alt sınıfız
        Console.WriteLine("I am a student.");
    }
}

class Program {
    static void Main(string[] args) {
        Student s = new Student(); // Student sınıfından bir nesne oluşturduk
        s.Name = "Ali"; // protected alanlara erişemiyoruz, hata alırız
        s.Age = 25;
        s.Greet(); // protected yönteme erişemiyoruz, hata alırız
        s.Introduce(); // public yönteme erişebiliyoruz
    }
}

Internal Access Modifier

Bu anahtar kelime ile tanımlanan bir üye, aynı derleme (assembly) içindeki herhangi bir kod parçasından erişilebilir. Farklı bir derlemeden erişilemez. Örneğin:

// Assembly1.dll içindeki bir sınıf
public class Person {
    internal string Name; // internal alan
    internal int Age; // internal alan

    internal void Greet() { // internal yöntem
        Console.WriteLine("Hello, my name is " + Name + " and I am " + Age + " years old.");
    }
}

// Assembly1.dll içindeki başka bir sınıf
class Program {
    static void Main(string[] args) {
        Person p = new Person(); // Person sınıfından bir nesne oluşturduk
        p.Name = "Ali"; // internal alanlara erişebiliyoruz, çünkü aynı derlemedeyiz
        p.Age = 25;
        p.Greet(); // internal yönteme erişebiliyoruz, çünkü aynı derlemedeyiz
    }
}

// Assembly2.dll içindeki bir sınıf
class Test {
    static void Main(string[] args) {
        Person p = new Person(); // Person sınıfından bir nesne oluşturduk
        p.Name = "Ali"; // internal alanlara erişemiyoruz, hata alırız, çünkü farklı derlemedeyiz
        p.Age = 25;
        p.Greet(); // internal yönteme erişemiyoruz, hata alırız, çünkü farklı derlemedeyiz
    }
}

Protected Internal Access Modifier

Bu anahtar kelime ile tanımlanan bir üye, tanımlandığı sınıf, bu sınıftan türetilen alt sınıflar veya aynı derleme içindeki herhangi bir kod parçasından erişilebilir. Farklı bir derlemeden ve alt sınıf olmayan bir kod parçasından erişilemez. Örneğin:

// Assembly1.dll içindeki bir sınıf
public class Person {
    protected internal string Name; // protected internal alan
    protected internal int Age; // protected internal alan
   
    protected internal void Greet() { // protected internal yöntem
        Console.WriteLine("Hello, my name is " + Name + " and I am " + Age + " years old.");
    }
}

// Assembly1.dll içindeki başka bir sınıf
public class Student : Person { // Student sınıfı Person sınıfından türedi
    public void Introduce() { // public yöntem
        Greet(); // protected internal yönteme erişebiliyoruz, çünkü alt sınıfız ve aynı derlemedeyiz
        Console.WriteLine("I am a student.");
    }
}

class Program {
    static void Main(string[] args) {
        Student s = new Student(); // Student sınıfından bir nesne oluşturduk
        s.Name = "Ali"; // protected internal alanlara erişebiliyoruz, çünkü aynı derlemedeyiz
        s.Age = 25;
        s.Greet(); // protected internal yönteme erişebiliyoruz, çünkü aynı derlemedeyiz
        s.Introduce(); // public yönteme erişebiliyoruz
    }
}

// Assembly2.dll içindeki bir sınıf
public class Teacher : Person { // Teacher sınıfı Person sınıfından türedi
    public void Introduce() { // public yöntem
        Greet(); // protected internal yönteme erişebiliyoruz, çünkü alt sınıfız, fakat farklı derlemedeyiz
        Console.WriteLine("I am a teacher.");
    }
}

class Test {
    static void Main(string[] args) {
        Teacher t = new Teacher(); // Teacher sınıfından bir nesne oluşturduk
        t.Name = "Ali"; // protected internal alanlara erişemiyoruz, hata alırız, çünkü farklı derlemedeyiz ve alt sınıf değiliz
        t.Age = 25;
        t.Greet(); // protected internal yönteme erişemiyoruz, hata alırız, çünkü farklı derlemedeyiz ve alt sınıf değiliz
        t.Introduce(); // public yönteme erişebiliyoruz
    }
}

Bu yazıda C# dilinde Access Modifiers konusunu anlattım. Umarım yararlı olmuştur. Yeni başlayanlar için önemli bir konu olduğunu düşünüyorum. Soru veya görüşlerinizi yorumlarda paylaşabilirsiniz.

C# ile ilgili diğer yazılarım için: C# – Bizneyapiyoruzki

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.