יום שלישי, 28 בנובמבר 2017

ה-ref וה-C#) out)

בדומה ל"משתנה המיוחס" ב ++C, גם ב-#C פונקציה יכולה להשפיע על הארגומנטים שהיא מקבלת.
כדי להשפיע על ארגומנט נוסיף לו את המילה השמורה "ref" או "out" בראש הפונקציה ובשליחה לפונקציה.



ref

עם ref נשלח משתנה שכבר עבר אתחול. כל השינויים שהוא יעבור ישפיעו על המשתנה המקורי.

דוגמה:
החלפת ערכים בין שני משתנים
    class Program
    {
        static void Swap(ref int x, ref int y)
        {
            int tmp = x;
            x = y;
            y = tmp;
        }
        static void Main(string[] args)
        {
            int a = 5, b = 10;
            Swap(ref a, ref b);
 
            // :הדפסה
            Console.WriteLine("a: " + a); // a: 10
            Console.WriteLine("b: " + b); // b: 5
        }
    }










out

עם out נוכל לשלוח משתנה שעדיין אינו מאותחל. הפונקציה חייבת לאתחל אותו בעצמה. כל השינויים שהוא יעבור ישפיעו על המשתנה המקורי.

דוגמה:
קבלת שני ערכים שלמים מהמשתמש, ואת סכומם

    class Program
    {
        static int GetTwoValuesFromUser(out int firstNumber, out int secondNumber)
        {
            do
            {
                Console.Write("Enter first number: ");
            } while (!Int32.TryParse(Console.ReadLine(), out firstNumber));
 
            do
            {
                Console.Write("Enter second number: ");
            } while (!Int32.TryParse(Console.ReadLine(), out secondNumber));
 
            return firstNumber + secondNumber;
        }
        static void Main(string[] args)
        {
            int n1, n2, sum;
            sum = GetTwoValuesFromUser(out n1, out n2);
            Console.WriteLine("First number: " + n1 + "  Second number: " + n2 + "  Sum: " + sum);
        }
    }









אז מתי משתמשים ב-ref ומתי משתמשים ב-out ?
ref נועד להשפיע על משתנים קיימים. אם נרצה פונקציה שמבצעת שינויים על משתנים נשתמש בו.
out מאפשר לפונקציה להחזיר יותר מערך אחד. (הרי פונקיצה רגילה לא יכולה להחזיר יותר מערך אחד, משום שב-return הראשון נעצרת הפונקציה)



















החזרת ערך מיוחס (Reference return value):
פונקציה יכולה להחזיר ערך מיוחס. כל שינוי של הערך ישפיע על המקור.
שימושי בעיקר בפונקציות פנימיות של מחלקה.

[לא נתמך ב Visual Studio 2012. לקריאה נוספת ]













וזה הכל להיום.

אין תגובות:

הוסף רשומת תגובה