簡體   English   中英

以下代碼的輸出:為什么返回雨天[1] =星期日而不是星期五?

[英]Output of following code : Why would it return rainyday[1] = Sunday and not friday?

為什么返回雨天[1] =星期日而不是星期五? 在其他地方返回main()中定義的所有值

  Namespace ConsoleApp_toTestYourself
    {
        public struct forecast
        {
            public int temp { get; set; }
            public int press { get; set; }
        }


        class structStaticTest
        {
            public static void cts(string weather) { weather = "sunny"; }
            public static void cta(string[] rainyDays) { rainyDays[1] = "Sunday"; }
            public static void ctsr(forecast f) { f.temp = 35; }

            static void Main(string[] args)
            {
                string weather = "rainy";
                cts(weather);   //calling static method
                Console.WriteLine("the weather is " + weather);

                string[] rainyDays=new[]{"monday","friday"};
                    cta(rainyDays);  calling static method
                Console.WriteLine("the rain days were on "+rainyDays[0]+"  and   "+ rainyDays[1]);

                forecast f = new forecast { press = 700, temp = 20 };
                ctsr(f);  //calling static method
                Console.WriteLine("the temperature is  " + f.temp + "degree celcius");
                Console.ReadLine();
            }
        }
    }

輸出為:陰雨星期一星期日20攝氏度

由於cta方法將rainyDays[1]為星期日:

public static void cta(string[] rainyDays) { rainyDays[1] = "Sunday"; }

它在寫入控制台之前被調用:

cta(rainyDays);  //calling static method
Console.WriteLine("the rain days were on "+rainyDays[0]+"  and   "+ rainyDays[1]);

編輯:在您的靜態方法之間的差異。 其他方法不會更改傳遞的對象。

首先, cts不會更改字符串對象:

weather = "sunny";

不會改變原始對象 它創建新的字符串對象"sunny" ,並將其分配給變量(方法參數)。

有關此主題的更多信息:

其次, ctsr接受結構forecast作為參數。 結構按值傳遞,方法接收原始結構的副本並對其進行操作。 因此,您的更改對主要方法的weather沒有任何影響。

有關此主題的更多信息:

因為c#中引用類型和值類型之間存在差異,所以結構是值類型,當您將結構作為參數接收時,會創建該結構的另一個副本,因此,如果更改其中一個,則另一個不會更改。 變量(f)根據引用類型保存結構在堆棧上的實際數據,該變量僅保存對堆上內存位置的引用(實際數據),而指針本身在堆棧上。 在下雨天[1] =星期日的情況下,您更改了原始數據,因為沒有副本,並且您正在處理原始數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM