25 Oca 2016

C#'ta REF ve OUT İfadeleri

Ana metot parçalandığında, ana metottaki değişkenlerin alt metotlarda aynen devam etmesi ve ana metoda dönüldüğünde değerlerini koruması istendiğinde ya da bir metottan birden fazla sonuç döndürmesi istendiğinde, ref ve out kullanılır.


Bu durumlarda metotların içine ref ifadesi ile parametreleri referans olarak geçeriz veya out parametresi ile metodun içinde tanımlanmış değeri parametre'den döndürürüz. Bu şu anlama gelir; Hafızadaki adresi belli değişken üzerinde çalışmaya devam et. O metodun içinde yapılan bütün değişiklikler çağrıldığı metotta tanımlı değişkende yapılacaktır. Kullanım kalıbı;
veriTipi MetotIsmi (veriTipi1 parametre1, ref veriTipi2 referansParametre2, out veriTipi3 referansParametre3)
        {
            return ifade;
        }
Örnek:
static void Main(string[] args)
        {
            string ad = "Gökalp";
            int sayi = ad.Length;
            Console.WriteLine("İsim: {0} Sayı: {1}", ad, sayi);
            if(YaziyiDegistir(4, ref ad))
            {
                Console.WriteLine("İsim: {0} Sayı: {1}", ad, sayi);
                SayiyiDegistir(ad, out sayi);
                Console.WriteLine("İsim: {0} Sayı: {1}", ad, sayi);
            }
            Console.ReadKey();            
        }
        public static void SayiyiDegistir(string text, out int number)
        {
            number = text.Length;
        }
        private static bool YaziyiDegistir(int uzunluk, ref string text)
        {
            bool sonuc = false;
            if(text.Length > uzunluk)
            {
                text = text.Substring(0, uzunluk);
                sonuc = true;
            }
            return sonuc;
        }
Yukarıdaki örnekte ad değişkenini metot içine ref ile verdiğimizde ad değişkeninin hafızadaki adresini veriyoruz. Böylece text.Substring(0, uzunluk) satırında içeri verdiğimiz referansı 0-uzunluk arası kadar kestiğimizde isim değişkenini kesmiş oluyoruz. Bir yandan metottan dönen bool değerini kontrol amaçlı kullanırken bir yandan da isim değişkenini işliyoruz.
ÇIKTI:

Hiç yorum yok:

Yorum Gönder