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相关的笔试面试知识点,其他几 ...
随机推荐
- bzoj 3712: [PA2014]Fiolki
Description 化学家吉丽想要配置一种神奇的药水来拯救世界.吉丽有n种不同的液体物质,和n个药瓶(均从1到n编号).初始时,第i个瓶内装着g[i]克的第i种物质.吉丽需要执行一定的步骤来配置药 ...
- ZooKeeper如何保证单一视图
由于ZooKeeper的数据模型简单且全部在内存中,ZooKeeper的速度非常快.它提供了一系列保证: • 顺序一致性 • 原子性 • 单一视图 • 可靠性 • 实时性 下面将结合源码(3.4.10 ...
- Docker(十):Docker安全
1.Docker安全主要体现在如下方面 a)Docker容器的安全性 b)镜像安全性 c)Docker daemon安全性 2.安装策略 2.1 Cgroup Cgroup用于限制容器对CPU.内存的 ...
- 第六节 etc/passwd 、etc/shadow 、 useradd 、 groupadd
调优方法原理:禁用atime的修改来节省cpu和内存资源.命令:mount noatime disk 1.配置文件1. /etc/passwd文档结构:由":" 分隔成7个字段&q ...
- java 分解质因数
算法目的:对一个正整数分解质因数 一.算法分析: 1.建立整数列表,保存求到的因数. 2.声明整数i=2,用以递增取模:整数m,用于临时保存n 3.建立while循环,i小于等于整数m时,判断m%i, ...
- Python中range()和len()
- java 泛型基础问题汇总
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Java语言引 ...
- 高效的CSS代码(1)
——阅读笔记,欢迎纠错 平时写CSS时常用的两个CSS文档(小杂感觉用的蛮喜欢,也是看了些书,尝试使用效果不错) /************CSS reset *********/ /******** ...
- 【Java框架型项目从入门到装逼】第六节 - 用ajax请求后台数据
这一节我们来说一下如何用ajax提交请求? 我们先不讲ajax的原理,还是先以实战为主,看一下这个东西到底怎么用的? form表单: <!-- 采用post表单提交 --> <for ...
- linux系统编程:IO读写过程的原子性操作实验
所谓原子性操作指的是:内核保证某系统调用中的所有步骤(操作)作为独立操作而一次性加以执行,其间不会被其他进程或线程所中断. 举个通俗点的例子:你和女朋友OOXX的时候,突然来了个电话,势必会打断你们高 ...