且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Answer:关于C#连续赋值的面试题

更新时间:2022-10-02 13:49:03

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,因为,所以
Z=y=x;在编译的时候就会变成z=y=1。
1:y=1,因为y是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;

.所以这段代码无法通过编译:
 
 

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);
}


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
 
你都做对了吗?





本文转自LoveJenny博客园博客,原文链接:http://www.cnblogs.com/LoveJenny/archive/2011/06/28/2092577.html,如需转载请自行联系原作者