欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » C# » 正文

热门阅读

C#常见面试题汇总(一)

创建时间:2013年03月08日 21:05  阅读次数:(12164)
分享到:
1.const和readonly有什么区别?
const可以用于类的成员常量和局部常量,必须在声明时赋值,之后不可以对常量进行赋值。而readonly只能用于类的成员变量不能用于局部变量,在声明时可以不赋值,除了在构造函数中可以再次赋值外,其它的地方和const一样也不能赋值.

2.接口和抽象类有什么区别?你选择使用接口和抽象类的依据是什么?
区别如下 :
(1)抽象类可以有抽象成员(无具体实现),也可以有非抽象成员(有具体实现);接口只有抽象成员。 
(2)一个类不能同时继承多个抽象类,一个类可以同时实现多个接口。 
如果多个子类中有很多代码是重复的,这时采用抽象类,因为可以将这些代码放到抽象类的非抽象方法中,这样可以达到代码复用。当实现多个接口时因为抽象类不支持,只能使用接口。

3.struct和class有什么区别 
两者都可以有成员变量、属性、索引器、事件、函数、构造函数,主要区别如下:
区别点 结构struct 类class
类型 值类型 引用类型
成员变量 在声明时不能赋值 可以赋值也可以不赋值
构造函数 可以不写,系统提供默认构造函数,默认构造函数中会将所有成员值设为0,如果写了构造函数则构造函数必须有参数,且在构造函数中必须为每一个成员赋值。 可以不写,系统提供默认构造函数,写了也没有结构中的限制。
析构函数 不能有析构函数 可以有析构函数
继承性 自定义的结构不能从类继承,但可以实现接口,结构都是密封(sealed),不能从结构继承 类没有限制

4.try后面一个finally,try中有一个return,那么finally中的代码会不会运行?如果运行,是在return后还是return前
会运行,并且在return后运行。 

5.产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复
该题解题思路有很多,主要是看运行效率如何,下面提供一种方法。 
C#实现随机将1~10插入到数组中,且不能重复的示例

6.C#中要使一个类支持foreach遍历,实现过程怎样
必须实现IEnumerable,IEnumerator这两个接口,如下:
public class MyList : IEnumerable, IEnumerator
{
private int position = -1;
string[] array = new string[4];
public MyList()
{
array[0] = "a";
array[1] = "b";
array[2] = "c";
array[3] = "d";
}
#region IEnumerable 成员
//每次使用foreach时都会调用它得到一个枚举器 
public IEnumerator GetEnumerator()
{
Reset();
return (this as IEnumerator);
}
#endregion
#region IEnumerator 成员
//遍历时通过这个属性得到值 
public object Current
{
get { return array[position]; }
}
//访问下一个元素时使用MoveNext移动位置 
public bool MoveNext()
{
if (position < array.Length - 1)
{
position++;
return true;
}
else
return false;
}
//遍历前要使位置归位 
public void Reset()
{
position = -1;
}
#endregion
}

//以下不用foreach遍历集合 
MyList list=new MyList();
While(list.MoveNext())
{
Object o=list.Current;
}

7.以下程序有什么错
public class TestClass
{
private int count;
private static int y;
public static void setvalue()
{
count=1;
y=1;
}
}

答:在静态函数中只能访问静态成员变量;以上代码访问了实例成员。

8.net中什么类不能被继承
如果在类前加上sealed关键字,则表示该类为密封类,密封类不能被继承。 
sealed除了可以应用于类外,还可以应用于实例方法和属性。密封方法会重写基类中的方法,但其本身不能在任何派生类中进一步重写。当应用于方法或属性时,sealed修饰符必须始终与override一起使用。如:
//下面这个sealed使用正确,表示该类不能继承 
public sealed class Test
{
private int myVar;
//下面这个sealed错误,编译不会通过,因为sealed必须和override一起使用 
publicsealed int MyProperty
{
get{ return myVar; }
set{ myVar = value; }
}
//下面这个sealed使用正确,表示如果该类不是密封类, 
//那么在派生类中也不可以重写该方法 
public sealed override stringToString()
{
returnbase.ToString();
}
}

9.is和as有什么区别
is用来判断一个实例是否属于某个类。如: 
Dog d=new Dog();
if(d is Dog)
{
Console.WriteLine(“d是一只狗”);
}

以上语句Console.WriteLine(“d是一只狗”);会运行,因为d is Dog返回true,如果Dog从Animal类继承并实现了IPet接口,则d is Animal和d is IPet都会返回true;
as用于在兼容的引用类型之间执行转换,如果转换失败则返回null,它等价于如下语句: 
expression is type ?(type)expression : (type)null

10.net中函数传递参数有那些方式?有什么区别?
传值和传引用,传引用又两种方式,ref和out,ref要求变量在传参前赋值,out可以不赋值。传引用必须是一个地址,传值是指将栈中的值拷贝到函数的参数,传引用表示传入的变量和接收参数是同一个变量 
public class Test
{
public int myVar;
publicint MyProperty
{
get{ return myVar; }
set{ myVar = value; }
}
}

以上这个类中有字段和属性 
private void F(ref int i)
{
i = 100;
}

有一个方法传递引用,调用方式如下: 
Test t = new Test();
F(ref t. MyProperty);

以上代码编译不能通过,因为属性不是变量,其实质是函数,如下则可通过 
Test t = new Test();
F(ref t. myVar);

因为字段是变量

11.列举ASP.NET?页面之间传递值的几种方式
1).使用QueryString, 如....?id=1;response. Redirect()....
2).使用Session变量 
3).使用Server.Transfer
4).Application
5).<inputtype="hidden" ></input >
6).数据库 
7).ViewStat
8).cookie

12.简要谈一下您对微软.NET构架下remoting和webservice两项技术的理解以及实际中的应用
WebSevice使用HTTP协议,因此可以穿透防火墙。而Remoting使用TCP/IP,二进制传送提高效率。 
Remoting是.net中用来跨越machine,process,?appdomain进行方法调用的技术,对于三层结构的程序,就可以使用remoting技术来构建.它是分布应用的基础技术.相当于以前的DCOM;Web Service是一种构建应用程序的普通模型,并能在所有支持internet网通讯的操作系统上实施。Web Service令基于组件的开发和web的结合达到最佳,基于组件的对象模型?。

13.公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行?(排序的方式如DataGrid相似)。根据您的知识,请简要谈一下您的思路
根据点击的列头,包该列的ID取出,按照该ID排序后,在绑定到ListView中。y筫誰v^裇剉鰁P/f NO g蛻 Y;N.晞v.
来源:
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 54+95=? 的结果(结果是:149)
结  果: