MSMVPS.COM
The Ultimate Destination for Blogs by Current and Former Microsoft Most Valuable Professionals.

Pointer(Gösterici)'lar ve C#'ta string değişkenler.

Bir okurumdan gelen soruyu ve ona yazdigim cevabi sizlerle paylasiyorum.

Soru : C# ta tanimlanan string degiskenlerinin immutable yani bir kere tanimlandiginda içeriginin asla degistirilemeyecegini duydum. Ancak C#'ta pointer kullanarak aynen C de oldugu gibi tanimlanan string degiskenlerinin içerigini degistrmem mümkün mü acaba?

Cevap : Evet mümkün, bunun için unsafe kod bloklari kullanmaniz gerekir. Ayni zamanda fixed anahtar sözcügünü de kullanmaniz gerekir. Çünkü string bir referans türüdür ve bellekteki adrese GC tarafindan her an degistirilebilir. fixed anahtar sözcügü bunu engellemek için kullanilir. Pointerlari kullanarak string degiskenlerin bu davranisini asagidaki sekilde bozabiliriz.

unsafe static void Main()
{
    
string str = "Normal yöntemlerle asla degistiremedigimiz string";
    
fixed(char* ptr = str)
    
{
          
for(int i=0; ptr[i] != '\0'; ++i)
             
*(ptr+i) = 'X';
    
}
    
Console.WriteLine(str)
}

Ayni degiskeni ekrana yazdirdigimizda ekrana ""XXXXX..." yazdigini göreceksiniz. Sanirim bu örnek bile pointer larin gücünü göstermeye yeter.


Posted Jun 27 2005, 01:37 AM by sefer

Comments

sefer wrote re: Pointer(Gösterici)'lar ve C#'ta string değişkenler.
on 08-02-2005 14:53
ben programlarimda

string str = null

str = "Normal yöntemlerle asla degistiremedigimiz string";

seklinde bir sey tanimlayip sonrada sonuna karakter ekledigimi veya

str = ""

yapip baska degerler atadigimi hatirliyorum. bunlar nasil oluyor
sefer wrote re: Pointer(Gösterici)'lar ve C#'ta string değişkenler.
on 08-02-2005 21:14
Görünürde yapiyorsunuz zaten ancak siz yapabildiginizi zannediyorsunuz, çunku arka planda yeni bir string degiskeni tanimlaniyor ve eski deger bu yeni yere kopyalaniyor (tabi yaptiginiz eklemelerle birlikte)

Add a Comment

(required)  
(optional)
(required)  
Remember Me?


Copyright © is the original authors. Blog site is an independent site not sponsored by Microsoft. The Yoda blog server and the Brianna SQL server would like to thank www.ownwebnow.com and www.exchangedefender.com. They wouldn't be here and broadcasting without the generosity of Vlad Mazek and his companies.

Powered by Community Server (Commercial Edition), by Telligent Systems