OOP – Static Ve This Keywords

Static ve this anahtar kelimeleri nesne yönelimli programlamda oldukça önemli, mutlaka bilinmesi gereken kavramlardır. Her ne kadar birbirinden bağımsız gibi görünseler de bir konuda zıtlık yaşamalarından dolayı bu iki kavramı tek bir yazıda ele alacağım.

Static Keyword

Bir sınıfın içerisindeki oluşturulan her bir metot ve özelliğe static tanımlaması yapılabilir. Static ile tanımlanan sınıf üyesi, belleğin static bölgesinde tutulur ve program çalıştığı sürece bellekten silinmez. Bundan dolayı bir sınıftan nesne oluşturulmadan static olarak tanımlı üyeye Sınıf ismiyle beraber erişilebilir. Fakat oluşturulan nesne içerisinden static tanımlı üyeye erişim sağlanamaz.

Aşağıda Calculator sınıfının static olarak tanımlı topla fonksiyonuna nesne kullanılmadan erişilmiş ve herhangi bir hata durumu oluşmamıştır.

using System;

public class Calculator
{
    public static int sum(params int[] numbers) {
        int sum = 0;
        foreach(int number in numbers)
        {
            sum += number;
        }
        
        return sum;
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        int sum = Calculator.sum(4, 5, 6);
        
        Console.WriteLine(sum);
    }
}

Output: 15

This Keyword

This anahtar kelimesi bulunduğu nesneyi işaret eden bir referansdır. Nesnenin içerisindeki bir özelliği veya metodu, oluşturulan nesnenin içerisinde kullanılmak istendiğinde this anahtar kelimesi ile erişim sağlanır. Bu kavram tabii ki de her programlama dilinde this adını almamaktadır. Örneğin Python’da this yerine aynı görevi üstlenen self anahtar kelimesi kullanılır.

Aşağıda Calculator sınıfının sum metodunda number1, ve number2 özelliklerine this anahtar kelimesiyle erişim sağlanmıştır.

using System;

public class Calculator
{
    public int number1;
    public int number2;
    
    public void sum() 
    {
        Console.WriteLine(this.number1 + this.number2);
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        Calculator calc = new Calculator();
        calc.number1 = 5;
        calc.number2 = 4;
        calc.sum();
    }
}

Output: 9

Şimdi, neden this ve static anahtar kelimelerini aynı yazıda değindiğime gelelim.

Static olarak tanımlanan bir sınıf üyesine nesne oluşturulmadan erişim sağlanabiliyordu. This anahtar kelimesi ise bulunduğu nesneyi işaret ediyordu. Öyleyse static olarak tanımlanan bir üyeye this ile erişim sağlayabilir miyiz? Elbette HAYIR. Çünkü this bulunduğu nesneyi işaret ediyordu. Fakat static ile tanımlı üye sınıftan nesne oluşturulduğunda o nesnenin içerisinde yer almıyor. Dolayısıyla erişim sağlanamıyor. Yine aynı durumdan, static tanımlı bir metot içerisinde sınıftan herhangi bir üyeye erişim sağlanamaz. Sadece o sınıf içerisindeki static tanımlı üyelere this kullanılmadan direkt üye ismiyle erişim sağlanabilir.

Yorum Yaz

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir