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