Question:基於C#連續賦值的面試題(解答)

來源:互聯網
上載者:User

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

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

賦值運算子 ( =) 將右運算元的值儲存在左運算元表示的儲存位置、屬性或索引器中,並將值作為結果返回。
運算元的類型必須相同(即右運算元必須可以隱式轉換為左運算元的類型)。
首先來看
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.所以這段代碼無法通過編譯:

接著考慮第二題:

複製代碼 代碼如下: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。

你都做對了嗎?

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.