您的位置:首页 > 职场人生

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

2011-04-10 15:36 756 查看
考考准备面试的兄弟姐妹几个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#,没办法出题了。
 
我刚转c#的,见笑了
*****C#初级码农:*****
我觉得C#码农具备的知识包括,知道基本语法,会判断、选择、循环语句,会函数调用。
(1)
C# 如何处理 if - else 悬挂二义性问题的,比如:
int i = 3, j = 5;
if (i > j) i++; else if (i < j) j++; else i++;
[color=#0000FF]不太明白悬挂二义性的意思。但是下面这两种“断句”方式逻辑上是完全一致的[/color
C# code
// 1
if (i > j)
{
i++;
}
else if (i < j)
{
j++;
}
else
{
i++;
}

// 2
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;

}

“或”关系的话,先判断第一个,为true则跳过,false才判断第二个

(3)

调用函数,参数中 out 和 ref 有什么区别。

out还没用过,等会现补

*****C#熟练工*****

C#熟练工会比较复杂的函数调用,基本的面向对象知识,会定义对象。

(4)

什么是函数重载?

private void Foo() { ... }

public void Foo() { ... }

能不能构成函数重载?那

不能,参数一样

void Bar(ref int x) { ... }

void Bar(out int x) { ... }

能不能构成函数重载呢?

能,ref 和 out应该算不同的参数了

(5)

readonly关键字有什么用?

private readonly Person p = new Person() { Name = "Jim" };

private void foo()

{

  p.Name = "Peter"; //是否合法?

}

这个关键字也还没用过

*****基本掌握C#*****

这个层次应该掌握C#的基本语法,包括基本的面向对象语法、属性、数组

(6)

struct和class有什么不同?

struct默认值传递,class默认引用传递。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的一致,如何修改代码?

struct还是Jim,没变。class编成Peter了。

Person是struct的话,ArrayList<ref Person>

(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);

  }

}

为什么这个代码会报堆栈溢出的错误?

递归调用没有出口,调用栈溢出了。

FullName调FirstName,FirstName再调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()

B的

(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());

输出什么?

D.foo D.foo

C.foo被覆盖了,B对象当A型的用

*****熟练掌握C#*****

这个层次应该熟练理解C#的语言特性

(10)以下语言特性隶属于哪个版本的C#

泛型、分布类、分布方法、Lambda表达式、类初始化器、支持协变的泛型、自动属性、扩展方法、默认参数、重载操作符

、LINQ

应该是3.5才有的, 知道的有几个在vs2005(.NET 2.0)上用不了

(11)

抽象类和接口的区别。接口没有办法定义函数的实现,但是抽象类不支持多继承,那么如果我必须使用接口,如何解决接口无法定义函数实现的问题?

不知道

(12)

C# 4.0引入命名参数,那么在程序集A里面定义一个函数,程序集B里面引用程序集A,并且用命名参数调用A中的函数。

现在修改A中的函数的参数名,并且重新编译,B程序集不变。没有使用强名称。问B程序集的程序运行会有什么后果。

同不知道

结论,要学的还很多啊
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐