C# Properties

Fatih Altuntaş
3 min readOct 16, 2020

--

Bir sınıfın (class) değişkenlerine(variables) sınıfın dışındaki koddan erişmek bir yola ihtiyacımız vardır. Bunu yapmanın bir yolu değişkenleri herkese açık hale getirip (public) doğrudan erişmek olacaktır.

public class Player
{
private int experience;
}

Bu yeterli olur ama daha iyi bir yolu var. Daha iyi yol ise properties kullanmak.

Properties kendilerine değişkenler ve fields olarak da adlandırabileceğimiz kapsüllenmiş üye değişkenleri (encapsulate member variables) gibi davranır. Bu kapsülleme(encapsulation) bize bir alana(fields) ne zaman ve nasıl erişildiği konusunda daha fazla kontrol sağlar.

Diyelim ki Player classında var olan “experience” adlı bir fieldımız var ve ona erişmek için classın dışında var olan bir kod istiyoruz. Bir property yaratmak isterdik.

Bir propertynin syntaxı şu şekilde çalışır: İlk olarak, erişim değiştiriciyi (access modifier) belirtirsiniz. Ardından, türü(type) ve ardından propertynin adını belirtirsiniz. Propertyi adlandırmanın iyi yolu field ile aynı ismi kullanmak ama baş harfi büyük olacak şekilde. Ardından fonksiyon gibi süslü parantez açılır ve parantezi içine propertynin erişimcileri(accessor) yazılır.

Propertynin iki accessoru vardır: “get” ve “set”. Bunlar, sırasıyla bir propertye başvurulduğunda(referenced) ve tahsis edildiğinde(allocated) çağrılan fonksiyonlardır. Get accessor içinde, kapsüllediğimiz fieldı döndürüyoruz. Set accessorda, “value” anahtar sözcüğünü kullanarak fieldı allocate ediyoruz. Bir propertyi uygulamak için gereken tek şey bu.

public class Player
{
private int experience;
public int Experience
{
get
{
//diğer kod satırların
return experience;
}
set
{
//diğer kod satırların
experience = value;
}
}
}

Şimdi … başka bir scriptte, propertyi normalde yaptığımız gibi field yerine kullanabiliriz.

public class Game : MonoBehaviour 
{
void Start ()
{
Player myPlayer = new Player();

myPlayer.Experience = 5;
int x = myPlayer.Experience;
}
}

Değişkeni çağırmak için sadece public field kullanabilecekken neden bir property oluşturma sürecinden geçeceğinizi merak ediyor olabilirsiniz. public variables ile yapamayacağınız propertyler ile yapabileceğiniz iki şey vardır.

Birincisi, get ya da seti atlayarak, fieldı etkili bir şekilde read-only ya da write-only yapabilirsiniz. filed private ise, bir get accessor olmadan okuyamazsınız ve set accessor olmadan ona yazamazsınız.

İkincisi, accessorlara aynı fonksiyonlar gibi davranılabilmesidir. Bu, diğer kod satırlarını çalıştırabileceğiniz veya içlerindeki diğer fonksiyonları çağırabileceğiniz anlamına gelir.

field encapsulationın doğrudan olması gerekmez. Oyuncunun deneyim(experience) kazandığı ve her 1000 deneyim puanından(experience points) sonra seviye(level) atladığı bir oyun düşünün. experience pointsi temsil edecek bir field varsa, leveli temsil edecek bir property olabilir. experience points sayısını döndürmek yerine, level propertysinin get accessorı return experience field / 1,000 döndürebilir. Böylece, oyuncunun sahip olduğu experience miktarını değil, sayısal leveli döndürecektir.

    public int Level
{
get
{
return experience / 1000;
}
set
{
experience = value * 1000;
}
}

Ayrıca, level propertysi , bir level alan ve oyuncunun sahip olacağı experience miktarını hesaplayan ve bunu experience fieldda depolayan bir set accessora sahip olabilir.

Propertylerin bir başka özelliği de otomatik olarak uygulanabilmeleridir. Otomatik olarak uygulanan bir property oluşturmak için, bir shorthand syntax kullanırsınız. Bu syntaxda, get ve set accessordan sonra yalnızca bir noktalı virgül gelir.

public int Health{ get; set;}

Bu şekilde bir property oluşturmak, tam olarak bir field gibi davranmasını sağlar; aradaki fark, get veya set accessorı kaldırarak bir propertyi read-only veya write-only hale getirebilmenizdir.

Eğer Visual Studio kullanıyorsanız, hızlıca property oluşturmanın yolu “prop” yazıp tab’a basmaktır.

Kaynakça: Unity Learn-Creating Properties

--

--