Scott Hanselman的问题

.Net 程序员面试 C# 语言篇 (回答Scott Hanselman的问题)

 

  过去几年都在忙着找项目,赶项目,没有时间好好整理深究自己在工作中学到的东西。现在好了,趁着找工作的这段空余时间,正好可以总结和再继续夯实自己的.Net, C#基本功。在05年的时候,Scott Hanselman(微软的一个Principal Program Manager)在他的博客上列出了一张清单, 清单上是关于"一个好的.Net程序员应该知道的东东 What Great .NET Developers Ought To Know (More .NET Interview Questions)". 昨天认真的把这张清单读过一遍之后, 发现自己还是有不少的问题根本不知道答案, 不少的问题只能给出个模糊的答案. 于是萌生一个想法, 不防花点时间把这些问题一个一个的回答一遍, 应该对自己对别人都会有帮助吧.

  说干就干. 他的清单里对所有问题分了六个大类. 接下来的几天里我就开始每天都回答一类的问题. 今天就先从C#语言篇开始.

1.列出override跟new用法的不同. 什么是shadowing?  (Juxtapose the use of override with new. What is shadowing?)

简单的讲, 子类的override, 将忽略父类用virtual修饰的同名方法. 但子类的new, 将被父类用virtual修饰的同名方法所遮盖. 听起来有点抽象, 用下面代码演示一下, 就明了了.

 1 public class Animal
2 {
3 public virtual string DoSomething()
4 {
5 return "I can breathe";
6 }
7 }
8
9 public class Bird : Animal
10 {
11 public override string DoSomething()
12 {
13 return "I can fly";
14 }
15 }
16
17 public class Cat : Animal
18 {
19 public new string DoSomething()
20 {
21 return "I can run";
22 }
23 }

1 var animal = new Animal();
2 animal.DoSomething() // I can breathe
3  var bird = new Bird();
4 bird.DoSomething() // I can fly
5  var cat = new Cat();
6 cat.DoSomething()   // I can run

1 var animal = new Animal();
2 animal.DoSomething() // I can breathe
3  Animal bird = new Bird();
4 bird.DoSomething() // I can fly
5  Animal cat = new Cat();
6 cat.DoSomething()   // I can breathe
override 跟 new 的差别在上述运行结果中就现露无疑了. 当cat是Animal的时候, cat.DoSomething()只能用父类的函数. 但是bird.DoSomething()还是用自己override的函数.
 
 
2. 解释virtual, sealed, override 跟 abstract 的用法 (Explain the use of virtual, sealed, override, and abstract.)
virtual: 允许被子类重写.
sealed: 不允许被继承.
override: 在子类使用, 重写在父类中用virtual, abstract 或 override修饰的函数.
abstract: 只能被继承, 不能被实例化. 函数本身不能有实现代码, 但是可以有属性
 
 
3. 解释Foo.Bar, Version=2.0.205.0, Culture=neutral, PublicKeyToken=593777ae2d274679d 这行里每个部分的重要性跟用法 (Explain the importance and use of each component of this string: Foo.Bar, Version=2.0.205.0, Culture=neutral, PublicKeyToken=593777ae2d274679d)
Foo.Bar: Assembly(程序集)的名字, 
Version: 版本号, 就像 ASP.MCV 1.0, 2.0, 3.0
Culture: 这个程序集适用的文化环境
PublicKeyToken: 原作者在发布此程序集的时候生成, 用来鉴别这个程序集是否被别人修改过
 
 
4. 解释public, protected, private, internal 的不同 (Explain the differences between public, protected, private and internal)
public: 所有的地方都能调用
protected: 自己跟子类可以用
private: 只能自己的类里面用
internal: 只能当前程序集里用
protected internal: 是指protected or internal的用法
 
 
5. 使用Primary Interop Assembly (PIA)的好处是什么? (What benefit do you get from using a Primary Interop Assembly (PIA)?)
主互操作程序集(Primary Interop Assemblies)是一个由供应商提供的唯一的程序集。它包含用 COM 实现的类型的类型定义(作为元数据)。只能有一个主互操作程序集,而且该程序集必须由 COM 类型库的发行者用强名称签名。一个主互操作程序集可以包装同一类型库的多个版本。
如果导入为程序集的 COM 类型库不是由原类型库的发行者签名的,该类型库不能作为主互操作程序集。只有类型库的发行者才能产生真正的主互操作程序集。该程序集将成为用于与基础 COM 类型进行互操作的正式类型定义单元。
COM 组件的发行者生成主互操作程序集并将它们发布给开发人员以便在 .NET Framework 应用程序中使用。对于发行者,本节提供有关产生主互操作程序集的信息。对于开发人员,本节描述如何用主互操作程序集编程。

.

 
 
6. UNite 是通过什么机制知道要测试哪一个方法的? (By what mechanism does NUnit know what methods to test?)
从来没有想过这个问题, 参考了一下网上的答案, 是通过attributes. 其他人有什么更加详细的解释吗?
 
 
7. catch(Exception e){throw e;} 和 catch(Exception e){throw;}的区别 (What is the difference between: catch(Exception e){throw e;} and catch(Exception e){throw;})
前者不保留原先的stacktrace, 后者保留原先的stacktrace. 
 
 
8. What is the difference between typeof(foo) and myFoo.GetType()?
typeof(foo), foo 是类, 在编译的时候执行,myFoo.GetType(), myFoo 是类的一个实列,在运行时执行。沿用上面Bird跟Animal的例子

 1 var bird = new Bird();
2  if (bird.GetType() == typeof(Animal))
3 {
4 // can not go in here
5  }
6
7  if (bird is Animal)
8 {
9 // can go in here
10   Console.WriteLine("bird is an Animal");
11 }
9. Explain what’s happening in the first constructor: public class c{ public c(string a) : this() {;}; public c() {;} } How is this construct useful?
public a(string a) : this() {} 调用base constructor public c(){}. 好处是当base constructor c()有逻辑时(e.g. 初始化域)可以避免重复代码。
 
 
10. "This" 是什么?可以用在static函数中吗? (What is this? Can this be used within a static method?)
this 代指当前实例本身, 不可以用在静态函数中。因为静态函数不需要实例来调用的

Scott Hanselman的问题-1的更多相关文章

  1. “.Net 社区虚拟大会”(dotnetConf) 2016 Day 3 Keynote: Scott Hanselman

    美国时间 6月7日--9日,为期三天的微软.NET社区虚拟大会正式在 Channel9 上召开,美国时间6.9 是第三天, Scott Hanselman 做Keynote.今天主题围绕的是.NET ...

  2. 北京时间28号0点以后Scott Hanselman同志台宣布dotnet core 1.0 rtm

    今日占住微信号头条的好消息<终于来了!微软.Net Core 1.0下载放出>.本人立马跑到官网http://dot.net看了一下,仍然是.net core 1.0 Preview 1版 ...

  3. Scott Hanselman's 2014 Ultimate Developer and Power Users Tool List for Windows -摘自网络

    Everyone collects utilities, and most folks have a list of a few that they feel are indispensable.  ...

  4. .Net 程序员面试 C# 语言篇 (回答Scott Hanselman的问题)

    过去几年都在忙着找项目,赶项目,没有时间好好整理深究自己在工作中学到的东西.现在好了,趁着找工作的这段空余时间,正好可以总结和再继续夯实自己的.Net, C#基本功.在05年的时候,Scott Han ...

  5. .Net程序员面试 每个人都应知道篇 (回答Scott Hanselman的问题)

    昨天回答了Scott Hanselman在他清单上关于C#那部分的题目,.Net 程序员面试 C# 语言篇 (回答Scott Hanselman的问题),今天接着回答他在清单上列出的"每个写 ...

  6. .Net程序员面试 中级篇 (回答Scott Hanselman的问题)

    继<.Net 程序员面试 C# 语言篇 (回答Scott Hanselman的问题)>跟<.Net程序员面试 每个人都应知道篇 (回答Scott Hanselman的问题)>之 ...

  7. Scott Hanselman的问题-3

    .Net程序员面试 中级篇 (回答Scott Hanselman的问题)   继<.Net 程序员面试 C# 语言篇 (回答Scott Hanselman的问题)>跟<.Net程序员 ...

  8. Scott Hanselman的问题-2

    .Net程序员面试 每个人都应知道篇 (回答Scott Hanselman的问题)   昨天回答了Scott Hanselman在他清单上关于C#那部分的题目,.Net 程序员面试 C# 语言篇 (回 ...

  9. Connect() 2016 大会的主题 ---微软大法好

    文章首发于微信公众号"dotnet跨平台",欢迎关注,可以扫页面左面的二维码. 今年 Connect 大会的主题是 Big possibilities. Bold technolo ...

随机推荐

  1. Android 如何打造Android自定义的下拉列表框控件

    一.概述 Android中的有个原生的下拉列表控件Spinner,但是这个控件有时候不符合我们自己的要求, 比如有时候我们需要类似windows 或者web网页中常见的那种下拉列表控件,类似下图这样的 ...

  2. [CEOI2007]树的匹配Treasury(树形DP+高精)

    题意 给一棵树,你可以匹配有边相连的两个点,问你这棵树的最大匹配时多少,并且计算出有多少种最大匹配. N≤1000,其中40%的数据答案不超过 108 题解 显然的树形DP+高精. 这题是作为考试题考 ...

  3. info---Linux下info格式的帮助指令。

    info命令是Linux下info格式的帮助指令. 它的几个常用快捷键. ?键:它就会显示info的常用快捷键. N键:显示(相对于本节点的)下一节点的文档内容. P键:显示(相对于本节点的)前一节点 ...

  4. write---向指定登录用户终端上发送信息

    write命令用于向指定登录用户终端上发送信息.通过write命令可传递信息给另一位登入系统的用户,当输入完毕后,键入EOF表示信息结束,write命令就会将信息传给对方.如果接收信息的用户不只登入本 ...

  5. 【Uva 11584】Partitioning by Palindromes

    [Link]:https://cn.vjudge.net/contest/170078#problem/G [Description] 给你若干个只由小写字母组成的字符串; 问你,这个字符串,最少能由 ...

  6. 【LeetCode-面试算法经典-Java实现】【057-Insert Interval(插入区间)】

    [057-Insert Interval(插入区间)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a set of non-overlapping in ...

  7. AFNetworking框架的使用

    #import "ViewController.h" #import "AFNetworking.h" @interface ViewController () ...

  8. oracle_序列、索引、同义词

     ①序列 1.序列: 可供多个用户用来产生唯一数值的数据库对象     自己主动提供唯一的数值     共享对象     主要用于提供主键值     将序列值装入内存能够提高訪问效率 2.CREA ...

  9. wcf rest系列文章

    http://www.cnblogs.com/artech/archive/2012/02/15/wcf-rest.html 需要注意的是,发布的服务,可以在web behavior中指定显示help ...

  10. shrio 加密/编码

    在涉及到密码存储问题上,应该加密/生成密码摘要存储,而不是存储明文密码.比如之前的600w csdn账号泄露对用户可能造成很大损失,因此应加密/生成不可逆的摘要方式存储. 5.1 编码/解码 Shir ...