Metotlarda ref ve out kullanımı
Metotlar konusunda reference ve value type olarak parametre almaları konusuna değindikten sonra son olarak ref ve out anahtar kelimelerinin hangi amaçla ve nasıl kullanıldığını örneklerle görelim.
Hatırlarsanız önceki makalede value type olarak parametre alan metoda örnek verirken main() metodu içindeki ana değişkeni etkilemediğinden bahsetmiştik. Buradan çıkan sonuçta value typeların RAM'de Stack bölgesinde tutuluyor olmasıydı. Hatırlayalım :
class Program
{
static void Main(string[] args)
{
int x = 10;
Console.WriteLine(x);
Func(x);
Console.WriteLine(x);
Console.ReadLine();
}
static void Func(int k)
{
k = 5;
}
}
Yukarıdaki programı çalıştırdığınızda ekrana iki kere 10 yazacağını göreceksiniz. Şimdi ref anahtar sözcüğü ile metodumuza value type olan bir parametreyi referenca typemış gibi davranmasını sağlayabiliyoruz.
class Program
{
static void Main(string[] args)
{
int x = 10;
Console.WriteLine(x);
Func(ref x);
Console.WriteLine(x);
Console.ReadLine();
}
static void Func(ref int k)
{
k = 5;
}
}
Programı çalıştırdığımızda ekrana önce 10 ardından 5 yazdırdığını göreceksiniz. Bunun anlamı dışarıdan value type olarak geçirilecek olan parametre reference type olarak işlem görür.
Hemen out sözcüğünün kullanımına bakalım. ref anahtar sözcüğü kullanılırken parametre aktarımında ilk değerin verilmiş olması gerekir. Aksi takdirde program derlenmez. Eğer ilk değer vermek istemiyorsanız ya da program onu gerektiriyorsa out anahtar sözcüğü ile metodlara parametre geçirilir. Örneğimizde görelim :
class Program
{
static void Main(string[] args)
{
int x;
Func(out x);
Console.WriteLine(x);
Console.ReadLine();
}
static void Func(out int k)
{
k = 5;
}
}
Yukarıdaki program çalıştırıldığında ekrana 5 yazdıracaktır. Önceki örnekten farkı ise Main() metodu içinde x değişkeni ilk değeri atanmamıştır.
24 Kasım 2009 Salı öğleden sonra 12:50
Mesajınızı yazabilirsiniz