Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

C#’ta Gösterici(Pointer) – unsafe Komutu – II

Merhaba,

Bir önceki C#’ta Gösterici(Pointer) Nedir? başlıklı yazımda C# programlama dili sınırlarında göstericileri ele almış, nerede, ne amaçla var olduklarına değinmiş ve ayriyetten teorik olarak konuyla alakalı biraz detaylara girmiştik. Bu içeriğimizde ise C#’ta gösterici kullanmanın anahtarı olan unsafe(emniyetsiz) keywordü üzerine konuşuyor olacağız.

Yukarıda da belirttiğim gibi C#’ta gösterici kullanacaksak eğer ilgili kod bloğunu unsafe ile işaretlenmiş bir yapı içerisine almamız gerekmektedir. Bu yapı bir sınıf, metot yahut direkt olarak unsafe yapısı olabilir. Eğer ki unsafe keywordü kullanmaksızın gösterici kullanmaya kalkarsak programımız derlenmeyecektir.

Visual Studio ortamında gösterici kullanacaksak eğer emniyetsiz kod kullanımına yani unsafe kod yapısına izin vermemiz gerekmektedir. Bu izin için projemizin özelliklerine gelip “Build” kategorisinden “Allow unsafe code” sekmesine aşağıdaki görüntüde olduğu gibi onay vermemiz yeterli olacaktır.

C#'ta Gösterici(Pointer) - Unsafe Komutu - II

Evet… Artık projemizde emniyetsiz(unsafe) kod kullanılabilirliği aktifleştirdiğimize göre unsafe keywordünün varyasyonlarını tek tek ele alabiliriz.

  • Sınıf Yapılarında unsafe Anahtar Sözcüğü
    Sınıflar unsafe keywordü ile işaretlenebilirler.

        unsafe class MyClass
        {
            public void X() { }
            public int Y()
            {
                return 0;
            }
            public string Z
            {
                get
                {
                    return "";
                }
                set { }
            }
        }
    

    Haliyle bu şekilde bir kullanımda sınıf içerisindeki tüm yapılarda pointer kullanabilmekteyiz. Yukarıdaki kod bloğunu incelerseniz eğer “X” ve “Y” metotlarıyla birlikte “Z” propertysi içerisinde emniyetsiz kodları yani pointerları gönül rahatlığıyla kullanabilmekteyiz.

  • Metot Yapılarında unsafe Anahtar Sözcüğü
    Herhangi bir metodu unsafe ile işaretleyip sadece o metot içerisinde gösterici kullanabiliriz.

        class MyClass
        {
            unsafe public void X() { }
            public int Y()
            {
                return 0;
            }
            public string Z
            {
                get
                {
                    return "";
                }
                set { }
            }
        }
    

    Burada dikkat ederseniz sadece “X” metodu unsafe ile işaretlenmiştir. Bu demek oluyor ki, “X” metodu pointer barındırabilir lakin “Y” metodu ve “Z” propertysinde pointer kullanılamaz.

  • Property Yapılarında unsafe Anahtar Sözcüğü
    Metotlarda olduğu gibi property yapılarında da unsafe keywordü ile işaretleme yapabiliriz.

        class MyClass
        {
            public void X() { }
            public int Y()
            {
                return 0;
            }
            unsafe public string Z
            {
                get
                {
                    return "";
                }
                set { }
            }
        }
    

    Burada da gördüğünüz gibi sadece “Z” propertysi unsafe ile işaretlendiği için içerisinde pointer kullanılabilirken diğer metotlarda kullanılamaz.

  • unsafe Bloğu İle Emniyetsiz Çalışmak
    Eğer ki bir metot ya da propertyi unsafe ile işaretlemeden içerisinde pointer kullanmak istiyorsak unsafe bloğunu kullanabiliriz. unsafe bloğu dışında gösterici kullanılamaz. Bunun için aşağıdaki örnek kod bloğunu inceleyiniz.

        class MyClass
        {
            public void X()
            {
                //Gösterici kullanılamaz.
                unsafe
                {
                    //Gösterici kullanılabilir.
                }
            }
            unsafe public string Z
            {
                get
                {
                    //Gösterici kullanılamaz.
                    unsafe
                    {
                        //Gösterici kullanılabilir.
                    }
                    return "";
                }
                set
                {
                    //Gösterici kullanılamaz.
                    unsafe
                    {
                        //Gösterici kullanılabilir.
                    }
                }
            }
        }
    
  • Global Değişkenlerde unsafe Anahtar Sözcüğü
    Bir sınıf içerisindeki herhangi bir global değişken unsafe ile işaretlenebilir. Amma velakin bir metot ya da property içerisinde local bir değişkeni unsafe ile işaretleyemeyiz. Eğer ki metot ya da property içerisinde tek bir değişkene özel pointer kullanacaksak ya o ilgili yapı(metot-property) unsafe keywordü ile işaretli olmalı ya da o yapıda kullanacağımız alan unsafe bloğuna alınmalı.

        class MyClass
        {
            unsafe int x;
        }
    

Evet… Bu yazımızda C# ile pointer kullanabilmek için ilk aşama olan unsafe(emniyetsiz) tanımlamasını yapmayı ve bu tanımlamanın varyasyonlarını görmüş olduk. Bir sonraki makalemizde C# dilinde pointer bildirimini ve operatörlerini inceleyeceğiz.

O halde görüşmek üzere diyorum…
Hoşçakalın…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

4 Cevaplar

  1. Mustafa dedi ki:

    Nedir, amacı nedir anlatmamışsın

    • Gençay dedi ki:

      Aşağıdaki paragrafı okuyunuz.

      …Yukarıda da belirttiğim gibi C#’ta gösterici kullanacaksak eğer ilgili kod bloğunu unsafe ile işaretlenmiş bir yapı içerisine almamız gerekmektedir. Bu yapı bir sınıf, metot yahut direkt olarak unsafe yapısı olabilir. Eğer ki unsafe keywordü kullanmaksızın gösterici kullanmaya kalkarsak programımız derlenmeyecektir….

      Daha da anlaşılmıyorsa eğer bir önceki makaleye referans verilmiştir. Tam teferruatlı okumanızı tavsiye ederim.

  1. 25 Mayıs 2017

    […] C#’ta Gösterici(Pointer) – unsafe Komutu – II […]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir