1..NET中类和结构的区别?
类:能声明默认构造函数、析构函数,引用类型,在托管堆上存储,如string,能被继承
结构:不能声明默认构造函数、析构函数,值类型,在内存栈上分配地址,如int32,不能被继承(没有abstract 和sealed),
可以不使用new 初始化
相同之处:基类型都是Object
如何选择用结构还是类:
1.堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些
2.结构表示如点、矩形和颜色这样的轻量对象
3.多层次,多对象用类
4.如果数据简单,而且数据量小 用结构
2.C#中值类型和引用类型的区别?
值类型:内存栈,快,内存分配自动释放
引用类型:内存堆,慢,内存分配由GC控制
3.堆和栈的区别?
栈:编译期间就分配好的内存空间,大小已定,无需管理,自动释放
堆:运行时分配的内存空间,大小动态改变,由GC控制
关系:具体信息请看http://www.2cto.com/kf/201109/103302.html
4.什么是抽象类,是否可以实现接口,是否可以继承实体类,什么是接口,接口和抽象类有什么区别?接口是否可以继承接口,抽象类是否可以实现接口,抽象类是否可以继承实体类?
抽象类在定义类型方法的时候,可以给出方法的实现部分,也可以不给出,而接口所定义的方法都不能给出实现部分
继承类对于抽象类所定义的抽象方法,可以不用重写,接口类所定义的方法或者属性来说,在继承类中必须要给出相应的方法和属性实现
接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。
详细介绍请看:http://kb.cnblogs.com/page/42159/
5.new关键字的用法及理解
(1)new 运算符 用于创建对象和调用构造函数。
Class_Test MyClass = new Class_Test();
(2)new 修饰符 用于隐藏基类成员的继承成员。
public class BaseF { public class MyClass { public int x = 200; public int y; } } public class MyInheritF : BaseF { new public class MyClass { public int x = 100; public int y; public int z; } public static void Main(string[] args) { MyClass S1 = new MyClass(); BaseF.MyClass S2 = new BaseF.MyClass(); Console.WriteLine(S1.x);//100,隐藏了基类MyBaseC的MyClass Console.WriteLine(S2.x);//200 Console.Read(); } }
(3)new 约束 用于在泛型声明中约束可能用作类型参数的参数的类型。
public T abc<T>() where T:new() // 这个new,表示传入的类型T,必须存在无参数的构造函数 { T a = new T();// 如果没加上面的where约束,这里会报错 return a; }
6.能用foreach遍历访问的对象需要实现?
需要实现IEnumerable接口和GetEnumerator ()方法。
7.说明ASP.NET的Application特性?
Application对象用于记录不同用户访问网站留下的信息,如:可以用来当前访问网页的IP数,在服务运行期间都能持久的保存数据。Application支持启动和结束等事件。
8.简述ASP.NET的页面运行机制?
1、IIS接到客户请求。2、IIS把请求交给aspnet_ispai.dll进行处理。3、(第一次运行)装载Bin目录下的dll。
4、(第一次运行)读取Web.config配置。5、(第一次运行)初始化HttpApplication实例
6、创建HttpContext,创建HttpTextWrite。7、找到对应的HttpHandler(.aspx页面),处理http请求
8、处理Session。9、返回结果结客户。
9.简述ASP.NET一个页面的生命周期?
客户端请求页面
预初始化(OnPreInit)
初始化(OnInit)
完成初始化(OnInitComplete)
载入ViewState(LoadViewState)
处理回送数据(IPostBackDataHandler)
Page_OnPreLoad—》Page_OnLoad
回发更改通知(RaisePostDataChangedEvent)
处理回发事件(RaisePostBackEvent)
Page_OnLoadComplete
预呈现(OnPreRender)
完成预呈现(OnPreRenderComplete)
保存ControlState(SaveControlState)
保存ViewState(SaveViewState)
呈现(Render)
Page_UnLoad。
10. C#中的托管代码是什么? C#中的非托管代码是什么?
托管:由公共语言运行库环境(而不是直接由操作系统)执行的代码。托管代码应用程序可以获得公共语言运行库服务,例如自动垃圾回收、运行库类型检查和安全支持等
非托管:在公共语言运行库环境的外部,由操作系统直接执行的代码。非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务
11.C#支持哪几个预定义的值类型?
int,float,bool,decmail,char
12.C#支持哪几个预定义的引用类型?
object,String,ArrayList
13.如何解决装箱和拆箱引发的性能问题?
可以使用泛类型解决装箱和拆箱引发的性能问题
14.请举例System.Collections中常用的成员?
类:ArrayList、Hashtable,SortList
接口:ICollection、IEnumerable、IList
15.C#中的checked和unchecked的作用是什么?
unchecked标志的语句发生算术溢出时,不抛出异常
16.类成员有几种可访问形式?
this.;new Class().Method;
17.构造器Constructor是否可以被继承是否可以被Override?
Constructor不可以被继承,因此不能被重写(Overriding),但可以被重载(Overloading)
18.简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用?
19.简述 private、 protected、 public、 internal 修饰符的访问权限?
private : 私有成员, 在类的内部才可以访问。
protected : 保护成员,该类内部和继承类中可以访问。
public : 公共成员,完全公开,没有访问限制。
internal: 在同一命名空间内可以访问。
20.是否可以继承String类?
String类是final类故不可以继承
21.请说明在.net中常用的几种页面间传递参数的方法,并说出他们的优缺点?
session(viewstate) 简单,但易丢失 application 全局 cookie 简单,但可能不支持,可能被伪造 input type="hidden" 简单,可能被伪造 url参数 简单,显示于地址栏,长度有限 数据库 稳定,安全,但性能相对弱
22.请指出GAC的含义?
全局程序集缓存。
23.public static const int A=1;这段代码有错误么?是什么?
const不能用static修饰。
24.override是为了使用子类,A a=new B();此时a.method()是调用的子类方法?
New用父类实例就会调父类方法,用子类实例化就调子类,如A a=new B(),a.method()调的也是父类的,只有B a=new B();时才会用到子类方法
25..NET中的CTS、CLS和CLR?
CTS通用类型系统(Common Type System),CLS通用语言规范(Common Language Specification),CLR公共语言运行库(Common Language Runtime)
简单地说,CLR是CTS的实现,也就是说,CLR是应用程序的执行引擎和功能齐全的类库,该类库严格按照CTS规范实现。作为程序执行引擎,CLR负责安全地载入和运行用户程序代码,包括对不用对象的垃圾回收和安全检查。在CLR监控之下运行的代码,称为托管代码(managed code)
26.反射和序列化?
应用程序结构分为应用程序域—程序集—模块—类型—成员几个层次,公共语言运行库加载器管理应用程序域,这种管理包括将每个程序集加载到相应的应用程序域以及控制每个程序集中类型层次结构的内存布局
什么是反射:Net的应用程序由几个部分:‘程序集(Assembly)’、‘模块(Module)’、‘类型 (class)’组成,而反射提供一种编程的方式,让程序员可以在程序运行期获得这几个组成部分的相关信息
例如:
Assembly类可以获得正在运行的装配件信息,也可以动态的加载装配件,以及在装配件中查找类型信息,并创建该类型的实例。
Type类可以获得对象的类型信息,此信息包含对象的所有要素:方法、构造器、属性等等,通过Type类可以得到这些要素的信息,并且调用之。
MethodInfo包含方法的信息,通过这个类可以得到方法的名称、参数、返回值等,并且可以调用之。
什么是序列化:序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。
27.当发现不能读取页面上输入的数据时可能是什么原因造成的,怎么解决?
有可能是在Page_Load中数据处理时没有进行Page的IsPostBack属性判
28.阐述下sql注入漏洞,通常有哪些避免方法或修补方法?