C# Erişim Belirleyiciler, konusunu listeye yeni ekledim. Aklımda önceden belirlenmiş bir sıralama olmadığından dolayı arada anlatılması gereken bazı dersleri atlayabiliyorum. Mazur görün. C sharp erisim belirleyiciler yada erişim değiştiriciler demek, bir değişkenin, classın yada nesnenin proje bazında ulaşılabilir olup olmaması diyebiliriz. Örneğin tüm projede kullanmamız gereken bir değişken yada classı public anahtar kelimesi ile tüm form ve classlardan erişebilir hale getirebiliriz. Bugün ki konumuz bundan ibaret. Ancak teknik olarak 4, kullanım olarak 6 farklı erişim belirleyicisi vardır. Bu dersimizde hepsine de değineceğim.
C sharp erisim belirleyiciler projemizin güvenliğini arttırmak için de gerekli olan bir konudur. Bu sebeple bazı classlar için kısıtlamalar yapmamız gereken zamanlar olacaktır. C sharp ile hazırlanmış bir projede, tanımlanmış her şeye uygulanabilir. Class ‘lar, struct ‘lar (yapılar), function ‘lar (fonksiyonlar), method ‘lar (metodlar) ve property ‘ler (özellikler) seviyesindeki her şey dahildir.
C sharp erisim belirleyiciler
- C# Private (Gizli) : Varsayılan olarak her şey private olarak tanımlanır. Örneğin butona çift tıklayıp click eventini oluşturduğumuzda, private void olarak gelir. Herhangi bir şey yazılmaz ise yine private olarak algılanır. Örneğin, int i = 0; ifadesi de varsayılan olarak private algılanır. Private olarak belirlenmiş bir tanımlamaya sadece kendi class’ı içerisinden ulaşabilirsiniz.
- C# Protected (Korumalı) : Protected olarak belirtilen bir tanımlamaya sadece kendi class ‘ı içerisinden ve o class ‘tan türetilmiş diğer nesneler üzerinden erişebilirsiniz. Bir bakıma Private ile Public erişim belirleyicilerin birleşimi gibidir.
- C# Internal (İç / İçsel) : Public ‘e göre biraz daha kısıtlıdır. Tüm projeden erişilebilir ancak başka bir programdan erişemezsiniz. Örneğin bir class hazırladınız ve bu class ‘ı dll yaptınız. Bu dll ‘i de başka bir projenizde kullanacaksınız. Bu dll içerisinde internal olarak belirtilmiş tanımlara import ettiğiniz projeden ulaşamazsınız. (Hiç kullanmadım. Araştırmalarımdan anladığım kadarı ile bu anlama geliyor.)
- C# Public (Genel) : Public olarak belirtilen bir tanımlamaya projenin her yerinden ulaşabilirsiniz.
- C# Protected Internal (İç/İçsel Korumalı) : Protected ve Internal’ın erişim sınırlarının birleşimi gibidir. Ancak tek Internalın aksine diğer programlardan da erişebilir ancak Protected gibi kendi class ‘ı içerisinden ve ondan türetilen nesneler üzerinden erişebilir.
- C# Private Protected (Gizli Korumalı) : Sadece kendinden türetilmiş nesneler üzerinden kullanılabilir.
Kodlarla yaptığımız açıklamaları pekiştirelim.
Private (Gizli)
string _string = string.Empty; // yazılmamış olsa bile private dir int _int = 0; // yazılmamış olsa bile private dir private void button1_Click(object sender, EventArgs e) { // Otomatik private olarak gelir } void Islemler() { // yazılmamış olsa bile private dir } string _string_Islem() { // yazılmamış olsa bile private dir return ""; }
Protected (Korumalı)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace mustafabukulmez_com { public partial class Form3 : Form { public Form3() { InitializeComponent(); } protected string _string = string.Empty; protected int _int = 0; protected void button1_Click(object sender, EventArgs e) { } protected void Islemler() { _string_Islem(); } protected string _string_Islem() { return ""; } } class Class1 { void Deneme() { _string_Islem(); // Class1 Form3 class 'ı üzerinden türetilmediğinden dolayı // Satırın altını çizecektir. Yani hata verecektir } } class Class2 : Form3 { void Deneme() { _string_Islem(); // Class2 Form3 class 'ı üzerinden türetilmediğinden dolayı // Satırın altını çizecektir. Yani hata verecektir } } }
Internal (İç / İçsel)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace mustafabukulmez_com { public partial class Internal : Form { public Internal() { InitializeComponent(); } internal string _string = string.Empty; internal int _int = 0; internal void button1_Click(object sender, EventArgs e) { } internal void Islemler() { _string_Islem(); } internal string _string_Islem() { return ""; } } class Class11 { void Deneme() { Internal _internal = new Internal(); _internal._string = "Mustafa"; // Yeni nesne tanımlaması yaparak ulaşabildik. } } class Class22 { void Deneme() { Internal._string = "Mustafa"; // Yeni nesne tanımlaması yapmadan ulaşamadık. } } }
Public (Genel)
C# Global Değişkenler dersimde ayrıntılı bir şekilde anlattım.
Protected Internal ve Private Protected erişim belirleyicilerini hiç kullanmadığım için bu konularda örnek veremeyeceğim. Ancak üzülmeyin inceleyebileceğiniz bir site için link bırakıyorum. ;) Linkler Microsoft’un sitesindendir. Şöyle baktığımda yazılanları pek anlaşılır gelmiyor ama yine de kodları incelediğinizde anlarsınız. Takıldığınız yerde sorabilirsiniz.
C Sharp Erisim Belirleyiciler dersimizde bu kadar dostlar. Diğer derslerimizde görüşmek üzere.
C Sharp Eğitim Seti ve ERP Programlama ders listesine ulaşmak için tıklayınız.
Sağlıcakla ve takipte kalın. ;)
Yorumlar (1)