理论部分
1、解释.net、.netFrameWork、C#、Vs2005、ADO.NET
回答:.net:支持跨语言的开发平台
.netframework:.net下一个重要的组件,是开发环境
C#:是一种语言
VS:开发工具
ADO.Net:是操作数据库的一种技术.
2、为什么.NET程序第二次运行比第一次的效率高?
回答:因为第一次需要编译两次,第一次是通过C#编译器编译成微软中间语言(MSIL),它是独立于CPU,不能被机器识别,第二次编译是通过即时编译器,编译成二进制文件。第二次运行时,用哪编译那。
3、解释CLR、CTS、CLS?(或者是简述NET框架体系的结构组成)
回答:.net框架运行于操作系统之上,它包含两个重要组件:CLR(公共语言运行时)和FCL(.Net Frawork 类库)
CLR分为:
CTS: 通用类型系统, 用于解决不同类型的转化
CLS: 公共语言规范,用于制定以.net平台为目标的最少特征的语言规范
4、什么是多态?多态分几种?并分别解释
回答:多态就是多种形态. 也就是说多个对象在调用同一个方法时会有不同的结果。
多态分两种一种是重载,一种是重写
重载:在一个类中定义多个方法,方法名一样,但是参数类型或参数个数不一样,在方法调用的时候总能找到正确的方法,但是返回值类型不同不能构成重载的条件。
重写.:当子类继承父类时,子类把父类的一些属性和方法继承过来,一些方法不适合自己用的,就重写。如果父类中的方法在子类中被重写,调用的是被重写的方法。父类方法不能随便被重写,只有父类的方法使用 virtual,override,abstract修饰才能重写,并且子类在重写的时候要使用Override关键字。
5、什么是构造方法,构造方法有什么特征
回答:构造方法:1.名字与类名相同
2.没有返回值,不是void,而是什么都没有
3.只能用new关键字调用
4.实例化一个对象时会自动去调用相应的方法。
5、构造方法不能被继承
注意:对于父类有参的构造方法,只能手动调用,用base关键字,如果一个类没有构造方法,系统会提供一个默认的。
6、什么叫装箱、什么叫拆箱
回答:装箱:把值类型转换成引用类型,拆箱:把引用类型转换成值类型。
7、什么是值类型、什么是引用类型,他们有哪些区别?
回答:值类型包括:
基本数据类型(int,long,float,char,bool)
枚举(enum)
结构(struct)
引用类型包括:system.Object,string,class,接口(interface),数组
值类型:每一个值类型对象都有一个独立的内存区域保存这个对象,若对象的值改变就会在内存中保存这个值,也就是再开辟块空间。
引用类型:两个不同的对象引用同一个值,它们会指向同一个物理地址。
值类型传的是值,引用类型传的是引用,它们在内存当中的存储方式不同。
8、C#中常量用哪个关键字定义、使用时候注意什么?
回答:C#中常量用const修饰
使用时注意:1.在使用时不会发生改变(不能重新赋值)
2.在程序中反复使用
9、用一个例子说明枚举,枚举是值类型还是引用类型?
枚举使用关键字enum定义 用它来定义一组有限的值,如性别
回答:public enum Genders //定义枚举
{
Male,Female
}
枚举是值类型
10、什么是继承?使用继承需要注意哪些事项
回答:继承就是子类继承父类的属性和方法,拿过来变成自己的。
注意:
1.构造方法和私有的不能被继承,但是可以调用父类的构造方法。
对于有参的构造方法需使用base关键字调用
2.继承有传递性。
3.C#中继承有单根性,一个类不能同时继承多个父类。
4.实例化一个子类的时候,会自动去调用父类的构造方法
11、什么叫密封类
回答:被sealed关键字修饰的类称为密封类,密封类不能被继承
12、什么是抽象类,什么是接口?他们有什么区别?使用抽象类需要注意哪些事项
回答:
抽象类:对具体对象的最高抽象,这个对象拥有自己的最基本特征,它只有方法的定义没有方法的具体实现,用abstract修饰
接口:接口是某类行为或功能的抽象,是一种规范或者标准,用interface修饰
相同点:
1、都不能实例化
2、都包含未实现的方法
3、子类必须实现未实现的方法
不同点:
1、抽象类用abstract定义,接口用interface定义
2、抽象类只能继承一个类,而接口可以实现多个继承一个类,但类必须在最前面
3、非抽象派生类必须实现抽象方法,实现接口的类必须实现所有成员,
如果是继承一个接口可以不用实现接口中的方法
4、需要override实现抽象方法,接口是直接实现
5、抽象类中可以没有抽象方法 但抽象方法中必须包含抽象类,
13、C#中有哪些访问修饰符?他们的作用范围是什么?
回答:
1、private:私有的 只有自己可以访问(在哪定义,在哪用,其类中无法访问)
2、public:共有的,谁都可以访问,即只要你有权利访问定义的类,都可以访问
3、internal;只有在同一个程序集下才可以访问
4、protected:自己可以访问,子类可以访问
14、字段默认的是什么修饰符号?类默认的是什么修饰符号?
回答:字段默认是private,类默认是internal
15、谈谈你对面向对象思想的理解
回答:万物皆对象
面向对象思想有三大特性,具体为,
1,封装:保证对象自身数据的完整性和安全性。
2,继承:建立类之间的关系,实现代码复用,方便系统的扩展。
3、多态:相同的方法调用可实现不同的实现方式。
有利于代码重用
16、结构和类有什么区别?
回答:
相同点:
1、都可以包含字段,方法
2、都可以实现接口
不同点:
1、结构是值类型(不改变),类是引用类型(改变)
2、结构(值)存放在栈(堆栈)中,类(引用)存放在堆中
3、结构不能被继承,而类可以被继承
4、结构不能包含显示的无参数的构造方法,类可以
5、类使用时必须用new关键字,而结构可以使用也可以不使用new关键字
6、结构中不能给字段赋值,而类中可以
7、在结构的构造方法中必须给所以的字段赋值,既有几个参数就赋几个值类不需要
结构-->值类型-->传值且不改变-->指向两块空间
类-->引用类型-->传引用改变-->指向同一块空间
17、列举出ASP.NET页面之间传递值的几种方式?各有何优缺点
回答:
1、 Application
2、 使用QueryString,通过Request获取
3、 使用Session变量
4、 使用Server.Transsfer,在第二个页面上通过PreviousPage.FindControl()到第一个页面找控件
5、 在第一个页面上把按钮的postbackUrl设置成第二个页面,即把第一个页面的数据提交到第二个页面去处理,然后在第二个页面上通过PreviousPage.FindControl()到第一个页面找控件
ASP.NET 页面之间传递值的几种方式
1. 使用QueryString变量
QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中。如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法。但是对于传递数组或对象的话,就不能用这个方法了。下面是一个例子:
a.aspx的C#代码
private void Button1_Click(object sender, System.EventArgs e)
{
string s_url;
s_url = "b.aspx?name=" + Label1.Text;
Response.Redirect(s_url);
}
b.aspx中C#代码
private void Page_Load(object sender, EventArgs e)
{
Label2.Text = Request.QueryString["name"];
}
2. 使用Application 对象变量
Application对象的作用范围是整个全局,也就是说对所有用户都有效。其常用的方法用Lock和UnLock。
a.aspx的C#代码
private void Button1_Click(object sender, System.EventArgs e)
{
Application["name"] = Label1.Text;
Server.Transfer("b.aspx");
}
b.aspx中C#代码
private void Page_Load(object sender, EventArgs e)
{
string name;
Application.Lock();
name = Application["name"].ToString();
Application.UnLock();
}
3. 使用Session变量
想必这个肯定是大家使用中最常见的用法了,其操作与Application类似,作用于用户个人,所以,过量的存储会导致服务器内存资源的耗尽。
a.aspx的C#代码
private void Button1_Click(object sender, System.EventArgs e)
{
Session["name"] = Label.Text;
}
b.aspx中C#代码
private void Page_Load(object sender, EventArgs e)
{
string name;
name = Session["name"].ToString();
}
4. 使用Cookie对象变量
这个也是大家常使用的方法,与Session一样,其是什对每一个用户而言的,但是有个本质的区别,即Cookie是存放在客户端的,而session是存放在服务器端的。而且Cookie的使用要配合ASP.NET内置对象Request来使用。
a.aspx的C#代码
private void Button1_Click(object sender, System.EventArgs e)
{
HttpCookie cookie_name = new HttpCookie("name");
cookie_name.Value = Label1.Text;
Reponse.AppendCookie(cookie_name);
Server.Transfer("b.aspx");
}
b.aspx中C#代码
private void Page_Load(object sender, EventArgs e)
{
string name;
name = Request.Cookie["name"].Value.ToString();
}
5. 使用Server.Transfer方法
这个才可以说是面象对象开发所使用的方法,其使用Server.Transfer方法把流程从当前页面引导到另一个页面中,新的页面使用前一个页面的应答流,所以这个方法是完全面象对象的,简洁有效。
a.aspx的C#代码
public string Name
{
get{ return Label1.Text;}
}
private void Button1_Click(object sender, System.EventArgs e)
{
Server.Transfer("b.aspx");
}
b.aspx中C#代码
private void Page_Load(object sender, EventArgs e)
{
a newWeb; //实例a窗体
newWeb = (source)Context.Handler;
string name;
name = newWeb.Name;
}
18、.NET当中有几种页面跳转技术,有何区别?
回答:有四种
1、 使用<a>标记,效率最高
2、 Response.Redirect(),有一个回发的过程
3、 Server.Transfer()控制权不会回来
4、 Server.Execute() 执行完页面后控制权会回来再执行本页面
1和2可以跳到任何有效的路径 ,3和4必须在同一个站点下,并且是aspx页面才可以跳