none
static olmayan metodlara this ile referans göndirilmesi ne demektir ? RRS feed

  • Soru

  • static olmayan metodlara this ile referans göndirilmesi ne demektir ? 

    bir de static olanlara this ile referans göndrilmiyormuş bu ne anlama geliyor ? 

    şu referans gönderme olayını açıklayabilir misiniz ? 

    this anahtar sözüğünü iki şekilde biliyorum birincisi : mesela globaldaki değişkenle metod parametresi olarak olan değişken anyı isimse gloabal olana ulaşmak tiçin this kullanıyoruz, ikincisi ise ctor ile iki nokta koyup (:) this (a,5,0) gibi bir kullanım biliyorum ama this ile referans gönderme olayını bilmiyorum umarım derdimi iyi bir şekilde anlatabilmişimdir 

    şimdiden teşekkürler :) 

    22 Mayıs 2017 Pazartesi 16:57

Yanıtlar


  • this ve base farklı iki anahtar kelime. base (Miras aldığı) sınıfın üyelerine erişir, this ise hem sınıfın kendi üyelerine hemde miras aldığı sınıfın üyelerine erişir. Ancak bazı durumlarda bunu ayrıştırmak gerekebilir.
    Referans'tan kasıt, üyelere erişim sanırım, çünkü this sınıfın kendisini ve miras aldığı sınıfın üyelere erişimi sağlar. 

    Static sınıflarda this kullanılamaz. Static yapının içinde, static olmayan bir yapıyı doğrudan kullanamazsınız. Ancak instance'ını alıp kullanabilirsiniz -ki static yapının mantığı, nesnenin instance'ına ihtiyaç olmadığı durum- Static sınıfın içerisinde, static olmayan method tanımlayamazsınız mesela.

    Örneğin bu hatalı kullanımdır;

      public static class StaticSinif
        {
            public void Test()
            {
    
            }
        }

    Tam tersi durum kabul edilebilir;

    //Dışarıdan Test methoduna ulaşmak istediğinizde instance alarak ulaşamazsınız.Ancak StaticSinif.Test() yazarak ulaşabilirsiniz. Test methodu static olduğu için, içerisinde this anahtar kelimesi kullanamazsınız.
    public class StaticSinif
        {
            public static void Test()
            {
    
            }
        }

    Constructor (Yapıcı Method) ise şu şekilde;

        public class A
        {
            public int MyProperty { get; set; }
            public A(string param1, string param2)
            {
    
            }
        }
        public class B : A
        {
            public B()
                : base("a", "b")
            {
    this.MyProperty=10;//Miras aldığı A sınıfındaki propertye ulaşabiliyoruz.
    base.MyProperty=10;//Aynı işlemi base ile de yapabiliriz ama aradaki farklılık şu, base ile yalnızca kalıtım aldığı sınıftaki üyelere erişebilirken, this ile hem kendi sınıfın üyelerine hemde miras aldığı sınıfın üyelerine erişebiliriz.
            }
        }

    Mesela miras aldığınız sınıfta string a diye bir değişken olsun, miras verdiğiniz sınıfta da string a diye bir değişken olsun.

    Miras verdiği sınıftaki değişkenin altını çizecektir, nedeni ise miras aldığı sınıfta aynı değişkenin olması. Bu durumda shadowing yapabilirsiniz; 

    class A
    {
    public string Foo{get;set;}
    }
    class B:A
    {
    public new string Foo{get;set;} //bu kullanım methodlar içinde geçerli. Bu durumda miras aldığınız sınıftaki Foo isimli property'e ulaşabilmek için base anahtar kelimesini kullanmalısınız.
    }
     Burada shadowing ile ilgili açıklayıcı bir makale ve örnekler mevcut.

    Eğer referanstan kastınız; referans türleri, değer türleri eşitlikleri ise bu bambaşka bir konu başlığı. 

    Çalışmalarınızda kolaylıklar dilerim.


    Code is Poetry


    23 Mayıs 2017 Salı 10:03
    Moderatör

Tüm Yanıtlar

  • refanranstan kastın ne oluyor acaba ? parametre olarak this gönderebiliyoruz. yani class ın kendisni gönderiyoruz

    OMANSAK

    23 Mayıs 2017 Salı 09:40

  • this ve base farklı iki anahtar kelime. base (Miras aldığı) sınıfın üyelerine erişir, this ise hem sınıfın kendi üyelerine hemde miras aldığı sınıfın üyelerine erişir. Ancak bazı durumlarda bunu ayrıştırmak gerekebilir.
    Referans'tan kasıt, üyelere erişim sanırım, çünkü this sınıfın kendisini ve miras aldığı sınıfın üyelere erişimi sağlar. 

    Static sınıflarda this kullanılamaz. Static yapının içinde, static olmayan bir yapıyı doğrudan kullanamazsınız. Ancak instance'ını alıp kullanabilirsiniz -ki static yapının mantığı, nesnenin instance'ına ihtiyaç olmadığı durum- Static sınıfın içerisinde, static olmayan method tanımlayamazsınız mesela.

    Örneğin bu hatalı kullanımdır;

      public static class StaticSinif
        {
            public void Test()
            {
    
            }
        }

    Tam tersi durum kabul edilebilir;

    //Dışarıdan Test methoduna ulaşmak istediğinizde instance alarak ulaşamazsınız.Ancak StaticSinif.Test() yazarak ulaşabilirsiniz. Test methodu static olduğu için, içerisinde this anahtar kelimesi kullanamazsınız.
    public class StaticSinif
        {
            public static void Test()
            {
    
            }
        }

    Constructor (Yapıcı Method) ise şu şekilde;

        public class A
        {
            public int MyProperty { get; set; }
            public A(string param1, string param2)
            {
    
            }
        }
        public class B : A
        {
            public B()
                : base("a", "b")
            {
    this.MyProperty=10;//Miras aldığı A sınıfındaki propertye ulaşabiliyoruz.
    base.MyProperty=10;//Aynı işlemi base ile de yapabiliriz ama aradaki farklılık şu, base ile yalnızca kalıtım aldığı sınıftaki üyelere erişebilirken, this ile hem kendi sınıfın üyelerine hemde miras aldığı sınıfın üyelerine erişebiliriz.
            }
        }

    Mesela miras aldığınız sınıfta string a diye bir değişken olsun, miras verdiğiniz sınıfta da string a diye bir değişken olsun.

    Miras verdiği sınıftaki değişkenin altını çizecektir, nedeni ise miras aldığı sınıfta aynı değişkenin olması. Bu durumda shadowing yapabilirsiniz; 

    class A
    {
    public string Foo{get;set;}
    }
    class B:A
    {
    public new string Foo{get;set;} //bu kullanım methodlar içinde geçerli. Bu durumda miras aldığınız sınıftaki Foo isimli property'e ulaşabilmek için base anahtar kelimesini kullanmalısınız.
    }
     Burada shadowing ile ilgili açıklayıcı bir makale ve örnekler mevcut.

    Eğer referanstan kastınız; referans türleri, değer türleri eşitlikleri ise bu bambaşka bir konu başlığı. 

    Çalışmalarınızda kolaylıklar dilerim.


    Code is Poetry


    23 Mayıs 2017 Salı 10:03
    Moderatör