C# Class (Sınıflar)

  • 457
  • (3)
  • (5)
  • 13 Tem 2017

Yapılar (struct) gibi Stack bölgesinde tutulmayan class veri modelleri referans türü veri modelleri olduğu için Heap bölgesinde tutulur. Birbiri ile ilişkisel özellikler taşıyan veri modelleri için daha uygundur. Bir örneği diğerine eşitlendiği zaman adres eşitlemesi yapılacağı için birinin özelliğini değiştirirseniz diğerininki de değişecektir.

Aşağıda oluşturulan sınıf üzerinden bunu inceleyebilirsiniz.


class Program
{
    static void Main(string[] args)
    {
        Country tr = new Country("Türkiye", 80000000, "Türkçe", "Ankara");
        Country de = new Country("Almanya", 82000000, "Almanca", "Berlin");
        Country tr2 = tr;
        // Eğer tr' nin Population özelliğini değiştirirseniz
        tr.Population = 81000000;
        // tr2' nin de aynı özelliğini değiştirmiş olursunuz.
        // tr ve tr2' nin bellekteki adresleri aynıdır
        Console.WriteLine("Nüfus (tr): {0}", tr.Population);
        Console.WriteLine("Nüfus (tr2): {0}", tr2.Population);
        Console.WriteLine("Nüfus (de): {0}", de.Population);
        Console.ReadKey();
    }
}

class Country
{
    public string Name { get; set; }
    public int Population { get; set; }
    public string Language { get; set; }
    public string Capital { get; set; }

    //Yapıcı metot
    public Country(string name, int population, 
        string language, string capital)
    {
        Name = name;
        Population = population;
        Language = language;
        Capital = capital;
    }
}

Konsol çıktısı aşağıdaki gibi olacaktır.

Sınıflar içerisinde erişim belirleyicilerine ve kalıtıma kısaca değinilebilir.


class Program
{
    static void Main(string[] args)
    {
        DataModel data = new DataModel();
        data.Title = "başlık";
        // Duration özelliğine atama yapılamaz
        data.Duration = 7; // data.Duration kırmızı ile işaretlenir
        data.SaveToDatabase(); // görünmeyecektir.
        data.SaveToFile(); // görünmeyecektir.
        Console.ReadKey();
    }
}

public class BaseModel
{
    // ID özelliğine atama sadece bu sınıf içinde yapılabilir
    public int ID { get; private set; }
    /* Name özelliği burada ve bu sınıftan türetilen 
       her sınıfta görülebilir. Ancak başka bir yerde görülemez */
    protected string Name { get; set; }
    // Bu sınıf dışında hiçbir yerde görülemez ve atama yapılamaz
    private string SecretKey { get; set; }
    // Eğer bu sınıfı DLL olarak derlerseniz bu özelliği göremezsiniz
    internal double Size { get; set; }

    protected void SaveToDatabase()
    {
        /* Bu metot bu sınıf içerisinde ve bu sınıftan 
         türetilen sınıflarda çalışır */
    }

    private void SaveToFile()
    {
        // Bu metot sadece burada çalışır
    }
}

public class DataModel : BaseModel
{
    /* ID, Name, SecretKey ve Size özellikleri ile metotlar 
     bu sınıf içerisinde de mevcuttur. Hepsi erişim belirleyicilerine göre 
     erişilebilir. */
    // Title özelliğine her şekilde atama yapılabilir
    public string Title { get; set; }
    /* Eğer başka bir sınıfı da DataModel' den türetirseniz
     Duration özelliğine atama yapabilirsiniz. Ancak başka bir yerden
     sadece değeri okunabilir ve atama yapılamaz
     */
    public int Duration { get; protected set; }
    public void SetData()
    {
        // ID özelliğine burada atama yapılamaz
        ID = 11; // Bu satırda ID kırmızı ile işaretlenecektir
        /* ID özelliğinin get metodu erişilebilir ancak set metodu
         private olduğu için erişilemez */
        int id = ID; // Değer başka bir değere atanabilir
        Name = "veri modeli"; // Görülme ve atama yapılabilir
        SecretKey = ""; // Bu özellik görünmeyecektir bile
        Size = 4.5; // Görülebilir ve atama yapılabilir

        SaveToDatabase(); // bu metot burada çalışabilir
        // Çünkü DataModel BaseModel sınıfından türetilmiştir
        SaveToFile(); // private olduğu için görünmez
    }
}

İlişkili İçerikler

Kodlama esnasında yordamsal olarak geniş kolaylık sağlayan metot ve fonksiyon benzeri yapılan nesne yönelimli programlamada da büyük önem teşkil eder.

Nesne tabanlı programlamanın ana unsuru olan yapıların sınıflardan farklı referans türü veri olmamalarıdır.

Bir sınıfın metot veya özelliklerine erişim ile ilgili belirleyici kelimeleri inceleyebilirsiniz.

C# programlama dili içerisinde null kavramının ne ifade ettiğini öğrenmek için bu içeriğe bakabilirsiniz.

Paylaşın
Etiket Bulutu