日期:2014-05-20  浏览次数:20973 次

考考准备面试的兄弟姐妹几个C#问题,看看你们是否够格“精通C#”
考考准备面试的兄弟姐妹几个C#问题,看看你们是否够格“精通C#”。

题目是我自己随手编的,和网上雷同属巧合。如果这个贴能盖100楼,我会公布答案。题目和答案都是我自己想的,不保证正确,欢迎拍砖。

题目仅供娱乐,觉得无聊可以借助MSDN、编译器来回答。

下面开始:

*****C#初级码农:*****
我觉得C#码农具备的知识包括,知道基本语法,会判断、选择、循环语句,会函数调用。
(1)
C# 如何处理 if - else 悬挂二义性问题的,比如:
int i = 3, j = 5;
if (i > j) i++; else if (i < j) j++; else i++;
(2)
C#如何处理多个if条件判断问题的:
if (foo(1) || foo(2))
{
  ...
}
bool foo(int i)
{
  Console.WriteLine(i.ToString());
  return true;
}
(3)
调用函数,参数中 out 和 ref 有什么区别。

*****C#熟练工*****
C#熟练工会比较复杂的函数调用,基本的面向对象知识,会定义对象。
(4)
什么是函数重载?
private void Foo() { ... }
public void Foo() { ... }
能不能构成函数重载?那
void Bar(ref int x) { ... }
void Bar(out int x) { ... }
能不能构成函数重载呢?
(5)
readonly关键字有什么用?
private readonly Person p = new Person() { Name = "Jim" };
private void foo()
{
  p.Name = "Peter"; //是否合法?
}

*****基本掌握C#*****
这个层次应该掌握C#的基本语法,包括基本的面向对象语法、属性、数组
(6)
struct和class有什么不同?
ArrayList a = new ArrayList();
Person p = new Person() { Name = "Jim" };
ArrayList.Add(p);
p = ArrayList.Item[0];
p.Name = "Peter";
Console.WriteLine(ArrayList.Item[0]);
当Person定义为struct和class的时候分别是什么?如果希望struct的输出和class的一致,如何修改代码?
(7)
class Person
{
  private string firstname = "";
  private string lastname = "";
  public string FirstName
  { 
  get { if (firstname == "") return FullName; else return firstname; }
  set { firstname = value; }
  }
  public string LastName
  {
  get { if (lastname == "") return FullName; else return lastname; }
  set { lastname = value; }
  }
  public string FullName
  {
  get { return FirstName + " " + LastName; }
  }
  public Person()
  {
  Console.WriteLine(FullName);
  }
}
为什么这个代码会报堆栈溢出的错误?
*****掌握C#*****
这个层次应该懂得对象继承、重载、接口、委托
(8)
public class A
{
  public virtual void foo() { }
  public void bar() { foo(); }
}
public class B : A
{
  public override void foo() { }
}
调用
A a = new B();
a.bar(); // 调用哪个 foo()
(9)
public class A { }
public class B : A { }
public class C
{
  public void foo(B b) { Console.WriteLine("C.foo"); }
}
public class D : C
{
  public void foo(A a) { Console.WriteLine("D.foo"); }
}
调用:
D d = new D();
d.foo(new A());
d.foo(new B());
输出什么?
*****熟练掌握C#*****
这个层次应该熟练理解C#的语言特性
(10)以下语言特性隶属于哪个版本的C#
泛型、分布类、分布方法、Lambda表达式、类初始化器、支持协变的泛型、自动属性、扩展方法、默认参数、重载操作符
、LINQ
(11)
抽象类和接口的区别。接口没有办法定义函数的实现,但是抽象类不支持多继承,那么如果我必须使用接口,如何解决接口无法定义函数实现的问题?
(12)
C# 4.0引入命名参数,那么在程序集A里面定义一个函数,程序集B里面引用程序集A,并且用命名参数调用A中的函数。
现在修改A中的函数的参数名,并且重新编译,B程序集不变。没有使用强名称。问B程序集的程序运行会有什么后果。
*****精通C#*****
这个层次应该掌握全部C#的语法特性

对不起,我不精通C#,没办法出题了。

------解决方案--------------------
缺乏较变态的题目。
------解决方案--------------------
给你看另外一份面试题,老赵出的,哈哈,注重点完全不一样,我看了以后基本阵亡。。。
所以说程序员除了code,还得要了解底层东西。

什么是.NET?什么是CLI?什么是CLR?IL是什么?JIT是什么,它是如何工作的?GC是什么,简述一下GC的工作方式?
类(class)和结构(struct)的区别是什么?它们对性能有影响吗?.NET BCL里有哪些是类(结构),为什么它们不是结构(类)?在自定义类型时,您如何选择是类还是结构?
在.NET程序运行过程中,什么是堆,什么是栈?什么情况下会在堆(栈)上分配数据?它们有性能上的区别吗?“结构”对象可能分配在堆上吗?什么情况下会发生,有什么需要注意的吗?
泛型的作用是什么?它有什么优势?它对性能有影响吗?它在执行时的行为是什么?.NET BCL中有哪些泛型类型?举例说明平时编程中您定义的泛型类型。