程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> Answer:關於C#連續賦值的面試題

Answer:關於C#連續賦值的面試題

編輯:C#入門知識

題目在這裡:Question:關於C#連續賦值的面試題

在msdn中,對=號操作符的說明如下:

image

賦值運算符 ( =) 將右操作數的值存儲在左操作數表示的存儲位置、屬性或索引器中,並將值作為結果返回。操作數的類型必須相同(即右操作數必須可以隱式轉換為左操作數的類型)。 首先來看int x,y,z;
X = y = z = 1;1:z=1,將1賦值給z,接著返回1,2:y=(z=1),將返回的1賦值給y,並返回1,3:x=(y=(z=1)),將表達式2的結果1賦值給x。  接著看第一道題:const int x=1;
short y;
object z;
z=y=x;
首先要說明的是x是const,因為const是編譯時常量,所以Z=y=x;在編譯的時候就會變成z=y=1。1:y=1,因為y是short,所以1被轉換為short,所以返回值為1(short);2:將y=1返回的結果,也就是1(short)賦值給z,所以z是1(short)裝箱後的對象,GetType返回System.Int16. 值得一提的是,如果你將上面的const int x=1中的const去掉,代碼如下:int x=1;
short y;
object z;
z=y=x;
因為x是Int32,y是Int16,因為Int32無法隱式轉換成Int16.所以這段代碼無法通過編譯: 

clip_image002

 接著考慮第二題:class C
 {
     private string x;
     public string X
     {
         get { return x ?? ""; }
         set { x = value; }
     }
 }  static void Main()
{
    C c = new C();
    object z;
    z = c.X = null;

    //下面兩句話輸出什麼
    System.Console.WriteLine(z == null);
    System.Console.WriteLine(c.X == null);
}
關鍵就是分析:z=c.X=null;1:c.X=null;調用c的setX方法,設置x=null,並且將null作為值返回。2:z=(c.X=null);因為c.X=null,返回了null,所以將null賦值給z,z此時為null;3:Console.WriteLine(z==null),返回True;4:Console.WriteLine(c.X==null),調用c的getX方法,方法返回””,所以c.X==null,返回False。 你都做對了嗎?

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved