Arama butonu
Bu konudaki kullanıcılar: 1 misafir
8
Cevap
156
Tıklama
0
Öne Çıkarma
c#'ta call by value ve call by referance'ı doğru anlamış mıyım ?
D
8 yıl
Yüzbaşı
Konu Sahibi

ş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 ?
*/

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil





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

S
8 yıl
Yüzbaşı

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ı >
Bu mesaja 2 cevap geldi.
D
8 yıl
Yüzbaşı
Konu Sahibi

farkındayım bro ara vermekten oldu bunlar :D




Bu mesajda bahsedilenler: @seyfi84
D
8 yıl
Yüzbaşı
Konu Sahibi

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 >


Bu mesajda bahsedilenler: @seyfi84
G
8 yıl
Yarbay

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?


Bu mesaja 1 cevap geldi.
D
8 yıl
Yüzbaşı
Konu Sahibi

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 :)




Bu mesajda bahsedilenler: @elektro_gadget
G
8 yıl
Yarbay

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]);


Bu mesaja 1 cevap geldi.
D
8 yıl
Yüzbaşı
Konu Sahibi

eyw cevap için :) arada seni özelden rahatsız edebilir miyim ? soru sormak amacıyla




Bu mesajda bahsedilenler: @elektro_gadget
G
8 yıl
Yarbay

Hayır burada sor. Ben zaten c# bilmem.



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.