最近在看CLR VIA C#,发现了一些案例很适合来做面试题。特此整理:

1,System.Object里的GetType方法是否为虚函数?说出理由。
答案:不是,因为C#是一种类型安全的语言,如果覆写GetType,可以伪造类型,会引起很多问题。
 
2,在64位的操作系统上,C#语言定义的一个int变量,代表64位整数还是32位整数?为什么?
答案:32位,因为C#的int真实类型是System.Int32。
 
3,C#中是否存在联合的概念?如何使用?
答案:没有联合,可以用Attribute特性把struct封装成一个联合。具体用法略。
 
4,
public static void Main()
{
Int32 v = ;
Object o = v;
v = ; Console.WriteLine(v + ", " + (Int32)o);
}
以上代码一共进行了几次装箱?
答案:3次。第一次,Object o = v;第二次,v + ", ";第三次 , 字符串+(Int32)o。String的Contact方法传入的是Object类型,所以需要装箱。
 
5,阅读以下代码,写出输出:
internal struct Point
{
private Int32 m_x, m_y; public Point(Int32 x, Int32 y)
{
m_x = x;
m_y = y;
} public void Change(Int32 x, Int32 y)
{
m_x = x;
m_y = y;
} public override string ToString()
{
return String.Format("({0},{1})", m_x.ToString(), m_y.ToString());
}
} class Program
{
static void Main(string[] args)
{
Point p = new Point(, ); Console.WriteLine(p); p.Change(, );
Console.WriteLine(p); Object o = p;
Console.WriteLine(o); ((Point)o).Change(,);
Console.WriteLine(o);
}
}
答案:

,首先Point是值类型,其次,WriteLine方法并没有关于Point的重载方法(毕竟使我们自己写的)。因此,我们第一个WriteLine会把p进行装箱,调用WriteLine(Object)这个方法。装箱后的p找到有覆写的ToString,因此可以正常调用,这样前三次的输出应该都没有问题。最后一次输出,o是已装箱的p,我们强制转换成Point,这里会有一个拆箱的过程,系统会存一个临时的值变量Point,这个临时值变量会去调用Change方法,注意这并不会影响引用类型o的值。所以依然是2,2。

 
6,此题是5的加强版,请看代码:
internal interface IChangeBoxedPoint
{
void Change(Int32 x, Int32 y);
} internal struct Point : IChangeBoxedPoint
{
private Int32 m_x, m_y; public Point(Int32 x, Int32 y)
{
m_x = x;
m_y = y;
} public void Change(Int32 x, Int32 y)
{
m_x = x;
m_y = y;
} public override string ToString()
{
return String.Format("({0},{1})", m_x.ToString(), m_y.ToString());
}
} class Program
{
static void Main(string[] args)
{
Point p = new Point(, ); Console.WriteLine(p); p.Change(, );
Console.WriteLine(p); Object o = p;
Console.WriteLine(o); ((Point)o).Change(,);
Console.WriteLine(o); ((IChangeBoxedPoint)p).Change(,);
Console.WriteLine(p); ((IChangeBoxedPoint)o).Change(,);
Console.WriteLine(o);
}
}
答案:

,虽然结构体继承了interface,但它的本质还是值类型,因此前面四个输出和题5一毛一样。第五个输出同第四个,值改变的是装箱后的p,因此值类型p的输出不受影响。最后一个输出,o已经是装箱后的对象,因此o是引用,改变值会生效。

C#面试题整理(1)的更多相关文章

  1. 【web前端面试题整理06】成都第一弹,邂逅聚美优品

    前言 上周四回了成都,休息了一下下,工作问题还是需要解决的,于是今天去面试了一下,现在面试回来了,我感觉还是可以整理一下心得. 这个面试题整理系列是为了以后前端方面的兄弟面试时候可以得到一点点帮助,因 ...

  2. C++ 面试题整理

    我和朋友们面到的c++试题整理 虚表 static const sizeof 可构造不可继承的类 stl Iterator失效 map vector vector的removed_if 优化 ---- ...

  3. Touch事件or手机卫士面试题整理回答(二)

    Touch事件or手机卫士面试题整理回答(二) 自定义控件 1. Touch事件的传递机制 顶级View->父View->子View,不处理逆向返回 OnInterceptTouchEve ...

  4. 尚学堂Java面试题整理

    博客分类: 经典分享   1. super()与this()的差别? - 6 -  2. 作用域public,protected,private,以及不写时的差别? - 6 -  3. 编程输出例如以 ...

  5. 【JAVA面试】java面试题整理(4)

    版权声明:转载请注明 https://blog.csdn.net/qq_33591903/article/details/83473779                               ...

  6. 北京Java笔试题整理

    北京Java笔试题整理 1.什么是java虚拟机?为什么ava被称作是"平台无关的编程语言? 答:Java虚拟机可以理解为一个特殊的"操作系统",只是它连接的不是硬件,而 ...

  7. Java笔试面试题整理第八波

    转载至:http://blog.csdn.net/shakespeare001/article/details/51388516 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...

  8. Java笔试面试题整理第六波(修正版)

    转载至:http://blog.csdn.net/shakespeare001/article/details/51330745 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...

  9. Java笔试面试题整理第五波

    转载至:http://blog.csdn.net/shakespeare001/article/details/51321498 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...

  10. Java笔试面试题整理第四波

    转载至:http://blog.csdn.net/shakespeare001/article/details/51274685 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...

随机推荐

  1. Beautiful Paintings

    There are n pictures delivered for the new exhibition. The i-th painting has beauty ai. We know that ...

  2. 《UNP》学习之TCP状态转换

    CLOSED:TCP起始状态 LISTEN:绑定端口后进入listen状态,一般是服务端 SYN_SENT:发送SYN连接请求,主动打开连接的一方进入SYN_SENT SYN_RCVD:接收到SYN连 ...

  3. extjs Proxy

    我们先来看看Extjs非常绚丽的Grid,其功能包括显示数据列表,修改.删除,分页,排序等功能.   Grid组件用来显示Store中的数据.Store可以看做是Model实例的集合.Grid仅关心如 ...

  4. Python day 7(2) 类和实例(1)

    一:面向对象编程 1  面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 2 ...

  5. SVG 入门——理解viewport,viewbox,preserveAspectRatio

    工欲善其事必先利其器,没有真正搞懂SVG里的viewport,viewbox, preserveAspectRatio这三个属性,就很容易遇到坑,最近写项目用到svg这三个属性被我一眼就略过 ,后来发 ...

  6. 测试BUG记录模板(供参考)

    文档说明如下: Bug严重程度: A-崩溃的:由于程序所引起的死机.非法退出.死循环:数据库发生死锁:因错误操作导致的程序中断:主要功能错误:造成数据破坏丢失或数据异常:数据库连接错误:数据通讯错误. ...

  7. TP框架如何开启log日志

    1. 日志的处理工作是由系统自动进行的,在开启日志记录的情况下,会记录下允许的日志级别的所有日志信息. 其中,为了性能考虑,SQL日志级别必须在调试模式开启下有效,否则就不会记录. 系统的日志记录由核 ...

  8. PowerShell 函数

    PowerShell 中函数是一系列 PowerShell 语句的组合.当你通过函数的名称调用函数时,函数中的语句会被顺序的执行,就像在命令行中执行它们一样. 从 hello world 开始 fun ...

  9. php 运算符and or && || 的详解

    想弄清这个问题,首先要了解这些运算符的优先级:了解后,我们才知道,逻辑运算和赋值运算的执行顺序: //and or 的优先级小于 = //&& || 的优先级大于 = //or-前面语 ...

  10. T-SQL逻辑查询处理

    引言 本文是对<Microsoft SQL SERVER 2008技术内幕 T-SQL查询>中的第一章做的阅读笔记,这一章的主要内容是分析SQL查询中各子句的执行顺序.如果你对此已了然于胸 ...