Şimdi Ara

c#'ta call by value ve call by referance'ı doğru anlamış mıyım ?

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
10
Cevap
0
Favori
146
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • şimdi burada call by value var :
    using System;

    namespace ConsoleApplication16
    {

    class Program
    {

    static void degertipi(int deger)
    {

    deger = 50;

    }

    static void Main(string[] args)
    {
    int a = 10;
    Console.WriteLine(a);
    degertipi(a);
    Console.WriteLine(a);

    }
    }
    }

    ____________________________

    anladığım şey şu ilk başta mainden başlanılıyor daha sonra a değişkenine 10 değeri atanıp a değişkeni yazdırılıyor daha sonra degertipi metodunun içine 10 gönderiliyor ve daha sonra bu metod bi şey yapmıyor daha sonra aşağıdaki Console.WriteLine'da 3 satır önce atadığımız 10 değişkeni tekrar yazdırılıyor. bunu böyle anladım yanlış mı anlamışım ?


    ________________________________

    bir de aşşağıda call by referance var bunuda nasıl anladığımı açıklayayım ona göre doğruysa doğru diyin yanlışsa beni düzeltin:

    using System;

    namespace ConsoleApplication16
    {

    class Program
    {

    static void referanstipi(string[] Deger)
    {

    DEger[0] = "100";

    }

    static void Main(string[] args)
    {
    string[] a = {"10","50" };
    Console.WriteLine(a[0]);
    referanstipi(a);
    Console.WriteLine(a[0]);

    }
    }
    }

    /* şimdi burada da a değişken dizisine string biçimde 10 ve 50 atanmış daha sonra 0 ıncı elamanı yazdırılmış daha sonra refaranstipi(a) olan yere a değişkenin adresi kopyalanmış daha sonra yukarıdaki referanstipi metodununa geçilip heap'te tutulan a[0] degerine "100" atanmış ve böylece alttaki yani main içindeki a[0] da değişmiş ve böylece ekrana 100 yazdırmış. doğru muyum ?
    */



    < Bu mesaj bu kişi tarafından değiştirildi deniz caliskan -- 2 Nisan 2017; 16:30:14 >







  • ilk programlama sorunu 9 ay önce sormuşsun, ve bu kadar zamandır hala en baştasın.

    < Bu ileti mini sürüm kullanılarak atıldı >
  • seyfi84 S kullanıcısına yanıt
    farkındayım bro ara vermekten oldu bunlar :D
  • seyfi84 S kullanıcısına yanıt
    aslında çok da ara vermedim ama her şeyi yapmaya çalışırken hiçbir şey yapamama oldu bende biraz ondan öğrendim diğerine geçtim biraz bundan öğrendim diğerine geçtim vs.. ama bundan sonra bir işi tamamlamadan diğerine geçmiyicem :D dedidiğinde haklısın bir şey diyemiyorum :( sen en iyisi bana call by value ve call by referance'ı öğret :D (c#ta tabi)



    < Bu mesaj bu kişi tarafından değiştirildi deniz caliskan -- 2 Nisan 2017; 15:52:13 >
  • C ile başlamış olsaydın çok rahat anlardın bu tür şeyleri. Yüksek seviyeli diller donanımla arana girip büyük resmi görmeni engelliyor.

    Metodları bir kenara bırak. Atama işleminde (=) neler olduğunu anlayabiliyor musun? Önce buna cevap ver.

    int a = 10;
    int deger = a;
    deger = 50;
    Console.WriteLine(a);

    Kaç yazar? Neden?


    string[] a = {"10","50" };
    string[] deger = a;
    deger[0] = "42";
    Console.WriteLine(a[0]);

    Kaç yazar? Neden?
  • birincsinde 10 yazar çünkü değer tipi stack te tutuluyor sen deger'e 50 verince stack'te yeni bir açmış oluyorsun bunun a ile ilgisi yok ikinicisinde ise ilk başta a[0]= "10" atanmış daha sonra deger'e a atanmış yani adres kopyalanmış daha sonra deger[0]= 42 atanmış bu yüzden a[0]'da değişmiş diye biliyorum ama denemedim c#ta şuan :)
  • Niye stack mtack karıştırdın şimdi onunla hiçbir ilgisi yok ama genel olarak doğru.

    Eee bunu biliyorsan sorduğun soru biraz anlamsız oluyor, aynı şey çünkü. Parametre geçirmek demek tek tek atama yapmak demek.

    void func(X a, Y b) { ... }

    func(1, 2); aslında şudur;
    a = 1;
    b = 2;
    func();

    Yani

    int a = 10;
    int deger = a;
    degertipi(); ( deger = 50; )
    Console.WriteLine(a);

    string[] a = {"10","50" };
    string[] deger = a;
    referanstipi(); ( deger[0] = "42"; )
    Console.WriteLine(a[0]);
  • eyw cevap için :) arada seni özelden rahatsız edebilir miyim ? soru sormak amacıyla
  • Hayır burada sor. Ben zaten c# bilmem.
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.