Question:基于C#連續(xù)賦值的面試題(解答)
題目在這里:Question:基于C#連續(xù)賦值的面試題介紹
在msdn中,對(duì)=號(hào)操作符的說明如下:
賦值運(yùn)算符 ( =) 將右操作數(shù)的值存儲(chǔ)在左操作數(shù)表示的存儲(chǔ)位置、屬性或索引器中,并將值作為結(jié)果返回。
操作數(shù)的類型必須相同(即右操作數(shù)必須可以隱式轉(zhuǎn)換為左操作數(shù)的類型)。
首先來看
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)),將表達(dá)式2的結(jié)果1賦值給x。
接著看第一道題:
const int x=1;short y;object z;z=y=x;
首先要說明的是x是const,因?yàn)閏onst是編譯時(shí)常量,所以
Z=y=x;在編譯的時(shí)候就會(huì)變成z=y=1。
1:y=1,因?yàn)閥是short,所以1被轉(zhuǎn)換為short,所以返回值為1(short);
2:將y=1返回的結(jié)果,也就是1(short)賦值給z,所以z是1(short)裝箱后的對(duì)象,
GetType返回System.Int16.
值得一提的是,如果你將上面的const int x=1中的const去掉,代碼如下:
int x=1;short y;object z;z=y=x;
因?yàn)閤是Int32,y是Int16,因?yàn)镮nt32無法隱式轉(zhuǎn)換成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);
}
關(guān)鍵就是分析:z=c.X=null;
1:c.X=null;調(diào)用c的setX方法,設(shè)置x=null,并且將null作為值返回。
2:z=(c.X=null);因?yàn)閏.X=null,返回了null,所以將null賦值給z,z此時(shí)為null;
3:Console.WriteLine(z==null),返回True;
4:Console.WriteLine(c.X==null),調(diào)用c的getX方法,方法返回””,所以c.X==null,返回False。
你都做對(duì)了嗎?
相關(guān)文章
WPF+SkiaSharp實(shí)現(xiàn)自繪彈幕效果
這篇文章主要為大家詳細(xì)介紹了如何利用WPF和SkiaSharp實(shí)現(xiàn)自制彈幕效果,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下2022-09-09c# Newtonsoft 六個(gè)值得使用的特性(上)
這篇文章主要介紹了c# Newtonsoft 六個(gè)值得使用的特性,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-06-06winform實(shí)現(xiàn)關(guān)閉按鈕失效的兩種方法
這篇文章主要介紹了winform實(shí)現(xiàn)關(guān)閉按鈕失效的兩種方法,實(shí)例分析了WinForm實(shí)現(xiàn)關(guān)閉按鈕失效的原理與所涉及的相關(guān)技巧,需要的朋友可以參考下2015-09-09基于C#實(shí)現(xiàn)一個(gè)簡(jiǎn)單的FTP操作工具
這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)一個(gè)簡(jiǎn)單的FTP操作工具,可以實(shí)現(xiàn)FTP上傳、下載、重命名、刷新、刪除功能,感興趣的可以了解一下2022-08-08