Question:基于C#连续赋值的面试题(解答)

 更新时间:2013年05月14日 10:40:09   作者:  
本篇文章是对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

你都做对了吗?

相关文章

  • 使用C#压缩PNG、JPEG和TIFF图像的方法

    使用C#压缩PNG、JPEG和TIFF图像的方法

    图像压缩是一种常用的减小图像大小的方法,它可以让您分别最小化存储和传输图像所需的空间和时间,有各种压缩技术可用来压缩图像,而不会降低图像的质量,根据这一点,这篇文章为您提供了一些使用 C# 以编程方式压缩PNG、JPEG和TIFF图像的简单方法
    2024-12-12
  • c# wpf如何更好的使用Application程序集资源

    c# wpf如何更好的使用Application程序集资源

    这篇文章主要介绍了c# wpf如何更好的使用Application程序集资源,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-04-04
  • C# 在PDF文档中创建表格的实现方法

    C# 在PDF文档中创建表格的实现方法

    表格能够一目了然的让用户看到数据信息,使信息显得有条理化,那么在pdf类型的文档中如何来添加表格并对表格进行格式化操作呢?下面小编给大家带来了C# 在PDF文档中创建表格的实现方法,需要的朋友参考下吧
    2017-12-12
  • C#递归算法之分而治之策略

    C#递归算法之分而治之策略

    分而治之的策略主要是将大量复杂的问题分成多个子问题,解决各个子问题,从而解决原问题,下面就让我们看看具体如何实现。
    2016-06-06
  • 详解WPF如何使用必应地图控件

    详解WPF如何使用必应地图控件

    这篇文章主要为大家详细介绍了WPF如何使用必应地图控件,文中的示例代码讲解详细,对我们学习或工作有一定帮助,感兴趣的小伙伴可以了解一下
    2022-11-11
  • C#预处理器指令详解与示例

    C#预处理器指令详解与示例

    在软件开发中,我们常常需要编写可移植和可配置的代码,C# 预处理器指令为我们提供了这样的能力,在本篇文章中,我们将详细介绍C#预处理器指令的定义、语法格式、功能以及在实际编程中的应用,需要的朋友可以参考下
    2024-04-04
  • c#装箱和拆箱知识整理

    c#装箱和拆箱知识整理

    这篇文章主要介绍了c#装箱和拆箱知识,装箱和拆箱是一个抽象的概念,需要的朋友可以参考下
    2014-03-03
  • c# 代理模式

    c# 代理模式

    代理模式:为其他对象提供一种代理以控制其他对象的访问
    2012-10-10
  • C#窗体编程不显示最小化、最大化、关闭按钮的方法

    C#窗体编程不显示最小化、最大化、关闭按钮的方法

    这篇文章主要介绍了C#窗体编程不显示最小化、最大化、关闭按钮的方法,即windows forms编程中取消最小化、最大化、关闭按钮,需要的朋友可以参考下
    2014-08-08
  • 详解c# 类的构造方法

    详解c# 类的构造方法

    本文主要介绍了c#类的构造方法。具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01

最新评论