C# Class (Sınıflar)
- 482
- (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.
C# programlama dili içerisinde null kavramının ne ifade ettiğini öğrenmek için bu içeriğe bakabilirsiniz.