C#面试题整理(1)
最近在看CLR VIA C#,发现了一些案例很适合来做面试题。特此整理:
public static void Main()
{
Int32 v = ;
Object o = v;
v = ; Console.WriteLine(v + ", " + (Int32)o);
}
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。
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)的更多相关文章
- 【web前端面试题整理06】成都第一弹,邂逅聚美优品
前言 上周四回了成都,休息了一下下,工作问题还是需要解决的,于是今天去面试了一下,现在面试回来了,我感觉还是可以整理一下心得. 这个面试题整理系列是为了以后前端方面的兄弟面试时候可以得到一点点帮助,因 ...
- C++ 面试题整理
我和朋友们面到的c++试题整理 虚表 static const sizeof 可构造不可继承的类 stl Iterator失效 map vector vector的removed_if 优化 ---- ...
- Touch事件or手机卫士面试题整理回答(二)
Touch事件or手机卫士面试题整理回答(二) 自定义控件 1. Touch事件的传递机制 顶级View->父View->子View,不处理逆向返回 OnInterceptTouchEve ...
- 尚学堂Java面试题整理
博客分类: 经典分享 1. super()与this()的差别? - 6 - 2. 作用域public,protected,private,以及不写时的差别? - 6 - 3. 编程输出例如以 ...
- 【JAVA面试】java面试题整理(4)
版权声明:转载请注明 https://blog.csdn.net/qq_33591903/article/details/83473779 ...
- 北京Java笔试题整理
北京Java笔试题整理 1.什么是java虚拟机?为什么ava被称作是"平台无关的编程语言? 答:Java虚拟机可以理解为一个特殊的"操作系统",只是它连接的不是硬件,而 ...
- Java笔试面试题整理第八波
转载至:http://blog.csdn.net/shakespeare001/article/details/51388516 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...
- Java笔试面试题整理第六波(修正版)
转载至:http://blog.csdn.net/shakespeare001/article/details/51330745 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...
- Java笔试面试题整理第五波
转载至:http://blog.csdn.net/shakespeare001/article/details/51321498 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...
- Java笔试面试题整理第四波
转载至:http://blog.csdn.net/shakespeare001/article/details/51274685 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...
随机推荐
- jQuery中$(function(){})与(function($){})(jQuery)、$(document).ready(function(){})等的区别详细讲解 ----转载
1.(function($) {-})(jQuery); 1).原理: 这实际上是匿名函数,如下: function(arg){-} 这就定义了一个匿名函数,参数为arg 而调用函数时,是在函数后面写 ...
- Oracle数据库中插入日期型数据(to_date的用法)(转载)
往Oracle数据库中插入日期型数据(to_date的用法) INSERT INTO FLOOR VALUES ( to_date ( '2007-12-20 18:31:34' , 'YYY ...
- gitlab 接入 openldap、AD
=============================================== 20171009_第2次修改 ccb_warlock === ...
- 虚拟机下linux系统安装nginx
近在windows虚机下安装nginx,也遇到部分问题,写篇随笔总结一下 一.安装虚机 windows下安装虚拟机我就不说了,一搜一大把,一直下一步就ok了 二. 打开虚拟安装nginx 1.选择版本 ...
- MobaXterm
MobaXterm又名MobaXVT,是一款增强型终端.X服务器和Unix命令集(GNU/ Cygwin)封装在一个单一的便携式exe文件.MobaXterm可以开启多个终端视窗,以最新的X服务器为基 ...
- angularjs 字段排序 多字段排序
我们用angularjs {{}},ng-model循环绑定数组或对象的内容的时候,有时候会用到排序,有时候可能会有多个字段排序 具体要用到过滤 数据的展现,可以通过ng-repeat实现.当网页解析 ...
- spring boot 遇到 supported setting property http://xml.org/sax/properties/lexical-handler
解决链接:http://apache-fop.1065347.n5.nabble.com/org-xml-sax-SAXNotSupportedException-thrown-by-FOP-td11 ...
- Python 项目实践三(Web应用程序)第四篇
接着上节继续学习,本章将建立用户账户 Web应用程序的核心是让任何用户都能够注册账户并能够使用它,不管用户身处何方.在本章中,你将创建一些表单,让用户能够添加主题和条目,以及编辑既有的条目.你还将学习 ...
- C# 真正能发邮件的源码
在网上找了很多例子都试邮件发送都失败,今天无意有试了一下居然行了 public static void ErrorMessageMail(string _subject, string _body) ...
- 解决CUICatalog: Invalid asset name supplied问题
这个问题其实是老问题,产生原因就是因为在使用的时候 [UIImage imageNamed:]时,图片不存在或者传入的图片名为nil.