Question:基于C#连续赋值的面试题(解答)
发布时间:2020-12-15 04:16:20 所属栏目:百科 来源:网络整理
导读:题目在这里:Question:基于C#连续赋值的面试题介绍 在msdn中,对=号操作符的说明如下: 赋值运算符 ( =) 将右操作数的值存储在左操作数表示的存储位置、属性或索引器中,并将值作为结果返回。 操作数的类型必须相同(即右操作数必须可以隐式转换为左操作数的
题目在这里:Question:基于C#连续赋值的面试题介绍 赋值运算符 ( =) 将右操作数的值存储在左操作数表示的存储位置、属性或索引器中,并将值作为结果返回。 操作数的类型必须相同(即右操作数必须可以隐式转换为左操作数的类型)。 首先来看 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() //下面两句话输出什么 关键就是分析: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。 你都做对了吗? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |