考考准备面试的兄弟姐妹几个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
(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程序集的程序运行会有什么后果。
同不知道
结论,要学的还很多啊
题目是我自己随手编的,和网上雷同属巧合。如果这个贴能盖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程序集的程序运行会有什么后果。
同不知道
结论,要学的还很多啊
相关文章推荐
- C#面试常考得几个问题
- [技术][.NET] << C#语言规范 >> -- Scott Wiltamuth & Anders Hejlsberg(美)
- [.NET]“.NET Framework 3.5 SP1”中属性“PublicKey”的值与文件“”的值不匹配问题解决
- Comet:基于 HTTP 长连接的“服务器推”技术
- C#使用.Net自带的MonthCalendar滚动年使日历的"日"显示不对的问题
- .NET的EF框架中:在应用程序配置文件中找不到名为“”的连接字符串问题
- 【Financial Markets】6. 技术面试准备问题(持续更新)
- "设备未准备好。如果目标是ActiveSync 设备,请验证ActiveSync 连接是否在运行"问题的解决
- 几个面试.net C#的题目
- 最近在准备面试,总结了几个java中面向对象的几个问题,问题本事还不够全面,要想知道还是要自己去找,但是在面试上应该是没多大问题了
- java面试中可能常问的几个技术问题及答案
- 浅谈C# .Net技术面试 , 正在找工作的人一定要看看
- 【非技术面试】31道,不准备就会掉进坑的问题
- Terracotta开发控制台监控远程服务器“Timed-out”的问题
- [面试笔记のT-SQL] 与关键字&ldquo;like&rdquo;配合使用的通配符
- "设备未准备好。如果目标是ActiveSync 设备,请验证ActiveSync 连接是否在运行"问题的解决
- 外企面试官们爱提的十个问题(转)-----大家看看你们面试时是这样的吗?
- iOS&nbsp;技术面试问题小集(以后…
- C# 2.0中的 &ldquo;泛型&rdquo;的&ldquo;类型参数&rdquo;
- 通宵研究了.NET的几个小问题,现在早上6点了,准备睡觉了