Erişim Belirleyiciler
Coddy'nin C# Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 31 / 70.
Erişim belirleyicileri, sınıf üyelerinizi kimlerin görebileceğini ve kullanabileceğini kontrol eder. Bunlar, OOP'nin temel ilkelerinden biri olan kapsüllemenin (encapsulation) temelidir. Erişimi kısıtlayarak verilerinizi korur ve kodunuzda net sınırlar oluşturursunuz.
C# dört ana erişim belirleyicisi sağlar:
public class BankAccount
{
public string AccountHolder; // Her yerden erişilebilir
private decimal balance; // Sadece bu sınıf içinden
protected string accountType; // Bu sınıf ve türetilmiş sınıflar
internal int branchCode; // Aynı derleme (assembly) içinde
}public üyeler herhangi bir koddan erişilebilirdir.
private üyelerine yalnızca aynı sınıf içinden erişilebilir - bu en kısıtlayıcı olanıdır ve sınıf üyeleri için varsayılandır.
protected sınıfın kendisinden ve ondan miras alan herhangi bir sınıftan erişime izin verir.
internal, aynı derleme (proje) içindeki koda erişimi kısıtlar.
Herhangi bir değiştirici belirtilmediğinde, sınıf üyeleri varsayılan olarak private olur:
class Example
{
int secret; // varsayılan olarak private
}Doğru erişim düzeyini seçmek, yalnızca gerekli olanı açığa çıkarmakla ilgilidir. private ile başlayın ve görünürlüğü yalnızca net bir nedeniniz olduğunda artırın. Bu, diğer kodların daha sonra değiştirmek isteyebileceğiniz uygulama detaylarına bağımlı olmasını önler.
Görev
KolayYalnızca gerekli olanları açığa çıkarırken erişim değiştiricilerinin hassas verileri nasıl koruduğunu gösteren güvenli bir kullanıcı profili sistemi oluşturalım. Kimlerin erişebilmesi gerektiğine bağlı olarak farklı bilgi parçalarının farklı görünürlük düzeylerine sahip olduğu bir sınıf oluşturacaksın.
Kodunu üç dosyaya ayıracaksın:
UserProfile.cs:UserProfilead alanında, kullanıcı bilgilerini uygun erişim düzeyleriyle yöneten birSecuritysınıfı oluştur. Profil şunlara sahip olmalı:- Bir
publicözelliği olanUsername(string) - kullanıcı adını herkes görebilir - Bir
privatealanı olanpassword(string) - buna yalnızca sınıfın kendisi erişebilmelidir - Bir
protectedalanı olanemail(string) - sınıf ve alt sınıfları buna erişebilir - Bir
internalalanı olanuserId(int) - aynı assembly içinde erişilebilir
publicdöndüren,GetPublicInfo()adlı bir"User: {Username}"metot ekle. Özel parolayla eşleşiyorsapublic, aksi takdirdeValidatePassword(string input)döndüren,trueadlı başka birfalsemetot ekle.- Bir
AdminProfile.cs:AdminProfilead alanında,Securitysınıfından kalıtım alan birUserProfilesınıfı oluştur. Bu sınıf,protectedüyelerin türetilmiş sınıflarda nasıl erişilebilir hâle geldiğini gösterir. Yapıcı aynı dört parametreyi kabul etmeli ve bunları temel yapıcıya aktarmalıdır.publicdöndüren,GetAdminInfo()adlı bir"Admin: {Username}, Email: {email}"metot ekle - burada korumalıemailalanına erişebildiğine dikkat et!Program.cs: Ana dosyanda, girdi değerlerini kullanarak birUserProfileve birAdminProfileoluştur. Kullanılabilir public metotları çağırarak ve internal alana doğrudan erişerek (aynı assembly içinde olduğun için) erişim düzeylerini göster. Her kullanıcı türünün hangi bilgileri açığa çıkarabildiğini göster.
Beş girdi alacaksın:
- Kullanıcı adı
- Parola
- E-posta
- Kullanıcı kimliği (tam sayı)
- Doğrulanacak parola denemesi
Çıktıyı şu biçimde yazdır:
Regular User:
{GetPublicInfo() result}
Internal ID: {userId}
Password valid: {ValidatePassword result}
Admin User:
{GetAdminInfo() result}Örneğin girdiler alice, secret123, alice@email.com, 1001 ve secret123 ise çıktı şöyle olmalıdır:
Regular User:
User: alice
Internal ID: 1001
Password valid: True
Admin User:
Admin: alice, Email: alice@email.comParolanın tamamen gizli kaldığına dikkat et - yalnızca doğrulayabilirsin, asla geri alamazsın. E-posta korumalıdır; bu nedenle onu yalnızca AdminProfile (türetilmiş bir sınıf) açığa çıkarabilir. internal userId aynı assembly içinde olduğu için ana dosyandan erişilebilir. İşte kapsülleme uygulamada böyle görünür!
Kendin dene
using System;
using Security;
class Program
{
public static void Main(string[] args)
{
// Girdileri oku
string username = Console.ReadLine();
string password = Console.ReadLine();
string email = Console.ReadLine();
int userId = Convert.ToInt32(Console.ReadLine());
string passwordAttempt = Console.ReadLine();
// TODO: Giriş değerleriyle bir UserProfile nesnesi oluşturun
// TODO: Aynı giriş değerleriyle bir AdminProfile nesnesi oluşturun
// TODO: "Regular User:" yazdırın
// TODO: GetPublicInfo() sonucunu yazdırın
// TODO: "Internal ID: " ve ardından userId alanını yazdırın (aynı assembly içinde olduğu için erişilebilir)
// TODO: "Password valid: " ve ardından ValidatePassword() sonucunu yazdırın
// TODO: "Admin User:" yazdırın
// TODO: GetAdminInfo() sonucunu yazdırın
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici Dosyalarİsim Alanları ve YönergelerSınıf ve Nesnelere Giriş'this' Anahtar KelimesiMetotlar ve ParametrelerAlanlar ve ÖzelliklerYapıcı MetotlarNesne BaşlatıcılarÖzet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtım (:) Sözdizimi'base' Anahtar KelimesiVirtual ve Override Anahtar KelimeleriSealed Sınıflar'object' Temel SınıfıÖzet - Çalışan Hiyerarşisi7İleri Düzey Özellikler
Operatör Aşırı Yüklemeİndeksleyiciler (this[])ToString() Geçersiz KılmaGenişletme MetotlarıÖzet - Özel Liste10Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişThread-Safe SingletonFactory KalıbıObserver Kalıbı (Olaylar)Strategy Kalıbı2Özellikler ve Statik Üyeler
Otomatik Uygulanan ÖzelliklerSadece Okunur/Yazılır ÖzelliklerStatik Alanlar ve MetotlarStatik Sınıflarİfade Gövdeli Üyeler5Polimorfizm ve Arayüzler
Derleme vs Çalışma Zamanı PolimorfizmiArayüz vs Soyut SınıfÇoklu ArayüzlerBelirgin ArayüzlerUpcasting ve DowncastingÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kalıtım yerine KompozisyonGenerics (Sınıflar ve Metotlar)Delegates ve EventlerAttributes ve ReflectionIDisposable ve using İfadesiDependency Injection Temelleri11Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit Kalıbı3Sınıf Mimarisi
Örnek vs Statik Veri'readonly' ve 'const' Anahtar KelimeleriDestekleyici Alanlar (Backing Fields)Özet - Banka Hesabı Yöneticisi6Kapsülleme
Erişim BelirleyicilerKapsülleme için ÖzelliklerVeri Gizleme UygulamasıDeğişmezlik KalıplarıÖzet - Öğrenci KayıtlarıKendi başına pratik yap: Online C# derleyicisi