c#基础快问快答
1.c#的特点
简单、面向对象、相互兼容性、可伸缩性
2.变量与常量
值类型:值类型的数据存储在内存的栈中;
引用类:引用类型的数据存储在内存的堆中;
3.变量命名规范:{
命名尽量用对应的英文命名,比如性别使用sex;
严格区分大小写;
驼峰命名法--当使用一个或者多个单词组成的变量时,要使用camel命名法,即第一个单词的首字母小写,其他单词的首字母大写,如myName;
}
4.枚举:(
枚举使用enum关键字来声明,与类同级;
枚举是值类型,隐式继承自System.Enum;
枚举都是隐式密封的,不允许作为基类派生子类;
枚举类型的枚举成员均为静态,默认为int32类型;
枚举成员不能相同,但枚举的值可以相同;
)
5.类型转换:{
(int)变量名[强制类型转换] ;
int.Parse(string 变量名);
int.TryParse(string s,out int result) ;
Convert.Int32(变量名) ;
}
6.变量定义:数据类型 变量名=变量值 ;
7.常量定义:{
常量是不能够被修改的变量,只读属性;
const 数据类型 变量名 = 变量值;
}
8.装箱和拆箱:{
装箱转换是指将一个值类型的数据隐式转换成一个对象类型的数据;
int i=1;(装箱) object obj=i;
拆箱转换是指将一个引用类型的数据显示转换成一个值类型数据;
object obj=1;(拆箱) int i=(int)obj;
}
9.c#默认的修饰符:{
直接声明在命名空间下的类和结构体,默认是internal的;
类和结构体的成员,包括内嵌的类和结构体,默认是private的;
接口默认是internal的;
enum的成员是public的访问权限;
类的成员,默认是private的访问权限;
接口的成员,默认是public的访问权限;
结构体的成员,和class类似,默认的访问权限也是private的;
}
10.c#访问修饰符:{
其他修饰符--
}
11.多态:
多态性的体现--同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果;·
12.int?和int有什么区别:{
int?为可空类型,默认值可以是null;
int默认值是0;
int?是通过int装箱为引用类型实现;
}
12.c#中类(class)与结构(struct)的异同:{
class可以被实例化,属于引用类型;
class可以实现接口和单继承其他类,还可以作为基类型,是分配在内存的堆上的;
struct属于值类型,不能作为基类型,但是可以实现接口,是分配在内存的栈上的;
}
13.重载、重写、虚方法、抽象方法:{
重载(overload)--在同一个作用域(一般指一个类)的两个或多个方法函数名相同,参数列表不同的方法叫做重载,它们有三个特点(
方法名必须相同;
参数列表必须不相同;
返回值类型可以不相同;
)
重写(override)--子类中为满足自己的需要来重复定义某个方法的不同实现,需用override关键字,被重写的方法必须是虚方法,用的是virtual关键字。它的特点是三个相同(
相同的方法名;
相同的参数列表;
相同的返回值;
)
虚方法--即为基类中定义的允许在派生类中重写的方法,使用virtual关键字定义;
注意:虚方法也可以直接被调用;
抽象方法--在基类中定义的并且必须在派生类中重写的方法,使用abstract关键字定义;
虚方法和抽象方法的区别--因为抽象方法无法实例化,所以抽象方法没有办法被调用,也就是说抽象方法永远不可能被实现;
隐藏方法--在派生类中定义的和基类中的某个方法同名的方法,使用new关键字定义;
}
14.比较接口和抽象类:{
抽象类可以有实现代码或没有实现代码的抽象成员,然而接口不能有任何实现代码;它是纯粹抽象的,所以接口不需要abstract关键字;
}
15.c#中用sealed修饰的类有什么特点?
密封,不能继承;
16.const和readonly有什么区别?{
都可以标识一个常量。主要有以下区别--
初始化位置不同,const必须在声明的同时赋值;readonly即可以在声明中赋值;
修饰对象不同,const即可以修饰类的字段,也可以修饰局部变量;readonly只能修饰类的字段;
const是编译时常量,在编译时确定该值;readonly是运行时常量,在运行时确定该值;
const默认是静态的;而readonly如果设置成静态需要显示声明;
修饰引用类型时不同,const只能修饰string或值为null的其他引用类型;readonly可以是任何类型;
}
17.什么是强类型,什么弱类型?哪种更好些?为什么?{
强类型是在编译的时候就确定类型的数据,在执行时类型不能更改,而弱类型在执行的时候才会确定类型;
没有好不好,二者各有好处,强类型安全,因为它事先已经确定好了,而且效率高;
一般用于编译型编程语言,如c++、java、c#、pascal等,弱类型相比而言不安全,在运行的时候容易出现错误,但它灵活,多用于解释型编程语言,如JavaScript等;
}
18.什么是匿名类,有什么好处?
不用定义、没有名字的类,使用一次便可丢弃;好处是简单、随意、临时的;
19.什么是WebService?
Web Service是基于网络的,分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行互操作;
20.23种设计模式分别叫什么名称,如何分类?{
分三类--创建型、行为型、结构型;
创建型包含(
单例模式;工厂模式;建造者模式;原型模式;工厂方法模式;
)
行为型包含(
策略模式;模板方法模式;观察者模式;迭代子模式;责任链模式;命令模式;备忘录模式;状态模式;访问者模式;中介者模式;解释器模式;
)
结构型设计模式包含(
适配器模式;装饰器模式;代理模式;外观模式;桥接模式;组合模式;享元模式;
)
}
21.using关键字的作用:
--引用命名空间;为命名空间或类型创建别名;
--释放资源,实现了IDisposiable的类在using中创建,using结束后会自定调用该对象的Dispose方法,释放资源;
22.私有成员会被继承吗?
--会,但是不能被访问。所以看上去他们似乎是不能被继承的,但实际上确实被继承了;
23.列举ADO.NET中的五个主要对象,并简单描述;
--Connection连接对象;Command执行命令和存储过程;DataReader向前只读的数据流;DataAdapter适配器,支持增删查询;DataSet数据级对象,相当于内存里的一张或多张表;
24.面向对象的思想主要包括什么?
--封装、继承、多态;
25.列举一下你说了解的XML技术及其应用;
--xml可以用来做网页(xslt)、可以当做数据库、可以用来保存对象的系列化。xml用于配置,用于保存静态数据类型,接触XML最多的是web Services和config;
26.概述反射和序列化:{
反射--公共语言运行库加载器管理应用程序域;这种管理包括将每个程序集加载到相应的应用程序域以及控制每个程序集中类型层次结构的内存布局。程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。
序列化--序列化是将对象状态转换为可保持或传输的格式的过程;与序列化相对的是反序列化,它将流转换为对象,这两个过程结合起来,可以轻松地存储和传输数据;
}
27.CTS、CLS和CLR分别做何解释?
CTS通用类型系统(common type system):一种确定公共语言运行库如何定义、使用和管理类型的规范;
CLR公共语言运行库:.Net Feamework提供了一个成为公共语言运行库的运行时环境,它运行代码并提供使开发过程更轻松的服务;
CLS公共语言规范:要和其他对象完全交互,而不管这些对象是以何种语言实现的,对象必须只向调用方公开那些它们必须与之互用的所有语言的通用功能。为此定义了公共语言规范(CLS),它是许多应用程序所需的一套基本语言功能;
28.Asp.net的身份验证方式有哪些?{
windows身份验证提供程序--提供有关如何将windows身份验证与Microsoft Internet信息服务(IIS)身份验证结合使用来确保ASP.NET应用程序安全的信息;
Forms身份验证提供程序--提供有关如何使用您自己的代码创建应用程序特定的登录窗体并执行身份验证的信息。使用Forms身份验证的一种简便方法是使用ASP.NET成员资格和ASP.NET登录控件,它们一起提供了一种只需少量或无需代码就可以收集、验证和管理用户凭据的方法;
Passport身份验证提供程序--提供有关由Microsoft提供的集中身份验证服务的信息,该服务为成员站点提供单一登录和核心配置;
}
29.ASP.NET中常见内置对象:
--Response、Request、Server、Session、Application、Cookie
30.进程和线程分别该怎么理解?
--进程是比线程大的程序运行单元,都是由操作系统所体会的系统运行单元;
--一个程序中至少要有一个进程,一个进程中,至少要有一个线程,线程的划分尺度要比进程小,进程拥有独立的内存单元,线程是共享内存,从而极大的提高了程序的运行效率同一个进程中的多个线程可以并发执行;
31.property与attribute的区别:
--property是属性,用于存取类的字段;
--attribute是特性,用来标识类,方法等的附加性质;
32.i++和++i有什么区别?
i++是先赋值,再自增;++i是先自增,再赋值;
33.静态成员和非静态成员的区别:{
静态变量使用static修饰符进行声明,不带有static声明的变量为非静态变量;
静态变量在类被实例化时创建,通过类进行访问;
非静态变量在对象实例化时创建,通过对象进行访问;
静态函数的实现里不能使用非静态成员,包含非静态变量和非静态函数;但非静态函数可以使用静态成员;
}
34.GC是什么?为什么要有GC?
--GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。
35.什么叫做SQL注入,如何防止?
--利用sql关键字对网站进行攻击。 过滤关键字等