您好,欢迎访问三七文档
.NET/C#试题专栏第1页共7页第1部分.NET基本概念1.应用程序域:应用程序域可以理解为一种轻量级进程。起到安全的作用。占用资源小。应用程序域提供安全而通用的处理单元,公共语言运行库可使用它来提供应用程序之间的隔离。开发者可以在具有同等隔离级别(存在于单独的进程中)的单个进程中运行几个应用程序域,而不会造成进程间调用或进程间切换等方面的额外开销。在一个进程内运行多个应用程序的能力显著增强了服务器的可伸缩性。2.CTS:通用类型系统。CTS:类似于COM定义的标准二进制格式,.NET定义了一个称为通用类型系统CommonTypeSystem(CTS)的类型标准。这个类型不但实现COM的变量兼容,而且还定义了通过用户自定义类型的方式进行类型扩展。任何类型的方式进行类型扩展。任何以.NET平台作为目标的语言必须建立它的数据类型与CTS的类型间的影射。所有.NET语言共享这一类型系统,实现他们之间无缝的互操作。该方案还提供了语言之间的继承性。3.CLS:公共语言规范。.NET通过定义公共语言规范(CLS:CommonLanguageSpecification),限制了由这些不同引发的互操作性问题。CLS指定了一种以.NET平台为目标的语言所必须支持的最小特征,以及该语言与其他.NET语言之间实现互操作性所需要的完备特征。CLS是CTS的一个子集。4.CLR:公共语言运行库CommonLanguageRuntime(CLR).CLR是CTS的实现,也就是说,CLR是应用程序的执行引擎和功能齐全的类库,该类库严格按照CTS规范实现。作为程序执行引擎,CLR负责安全地载入和运行用户程序代码,包括对不同对象的垃圾挥手和安全检查。CLR监控之下运行的代码,称为托管代码(managedcode)。5.IL(IntermediateLanguage,中间语言):可用于语言互操作性,IL不是字节代码,但很接近字节代码,因此执行应用程序时,IL到机器代码的转换要快很多。独立于CPU的指令集。由CLR转换为特定于CPU的代码。6.MicrosoftIntermediateLanguage(MSIL)微软中间语言:MSIL是将.NET代码转化为机器语言的一个中间过程。它是一种介于高级语言和基于Intel的汇编语言的伪汇编语言。7.托管代码:在.NET环境中运行的代码都称之为受管制的代码(托管代码),在.NET环境之外,在Windows上运行的代码称之为不受管制的代码。8.Assembly(程序集):(1)Assembly是一个部署的单元,比如EXE或者一个DLL(2)Assembly包含一个或者多个文件(dll,exe或者HTML文件),Assembly代表一组资源,类型定义和这些类型的实现,一个Assembly可能还包含对其他Assembly的引用,这些资源,类型和应用时在一个manifest得数据块中描述的。这个manifest是Assembly的一部分,它是的Assembly实现了自描述。(3)一个Assembly是完全的自描述的。一个Assembly包含有元数据,CLR使用这些元数据用来进行类型检查,安全等一切操作。因为所有的信息都是在assembly内部,所以它是不需要注册的,这就是它相对于COM的基本优势。(4)多个不同版本的Assembly可以部署到平级的不同文件夹内,这些不同的版本可以不相影响的共同执行。Assembly可以使私有的也可以是共享的,私有的Assembly部署时,是被拷贝到引用它的客户程序相同的目录,不需要注册,也不需要安装。当元件被删除时,也不需要清理注册表,同时也不需要卸载程序,之需要删除就好了。(5)在共享程序集部署中,一个程序集被安装在了GlabalAssemblyCache中,GAC包含可供这个机器上所有.NET应用访问的程序集。.NET/C#试题专栏第2页共7页9.GAC:GAC(GlobalAssemblyCache,全局程序集缓存)使用在共享的.NET程序集所在的目录。它解决了几个程序共享某一个程序集的问题。不必再将那个被共享的程序集拷贝到应用程序目录。.NET应用程序在加载的时候,会首先查看全局应用程序集缓存,如果有就可以直接使用,没有再到应用程序目录进行查找。它在以下几种情况下使用:(1)如果一个应用必须在在几个不同的应用间共享。(2)如果一个程序集有一些特定的安全需求,例如只有管理员可以删除这个Assembly,如果一个程序集是私有的那么只要简单的删除Assembly文件就可以删除这个程序集。10.GC:(GarbageCollection,垃圾收集器)。垃圾回收器是用来管理应用程序的内存分配和释放的。在垃圾回收器出现以前,程序员在使用内存时需要向系统申请内存空间。有些语言,例如VisualBasic,可以自动完成向系统申请内存空间的工作。但是在诸如VisualC++的语言中要求程序员在程序代码中申请内存空间。如果程序员在使用了内存之后忘了释放内存,则会引起内存泄漏。程序员不用担心内存管理,对象在离开生存期后垃圾收集器会自动进行内存回收。11.12.强类型与弱类型:强类型是在编译的时候就确定类型的数据,在执行时类型不能更改,而弱类型在执行的时候才会确定类型。二者各有好处,强类型安全,因为它事先已经确定好了,而且效率高。一般用于编译型编程语言,如c++,java,c#,pascal等,弱类型相比而言不安全,在运行的时候容易出现错误,但它灵活,多用于解释型编程语言,如javascript,vb等13.面向对象编程语言的特征:(1)封装:封装是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏(2)继承:继承指可以使用现有类,并在无需重新编写的情况下创建新类的过程,通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”(3)多态:是允许将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是允许将子类类型的指针赋值给父类类型的指针。14.进程和线程:进程是系统进行资源分配和调度的单位;线程是CPU调度和分派的单位,一个进程可以有多个线程,这些线程共享这个进程的资源。15.堆和栈的区别?答:栈:由编译器自动分配、释放。在函数体中定义的变量通常在栈上。堆:一般由程序员分配释放。用new、malloc等分配内存函数分配得到的就是在堆上。16.程序开发中的三层架构:三层指的是表示层、业务逻辑层和数据访问层。表示层:用户界面,和用户进行交互。业务逻辑层:业务逻辑主要是自定义一些业务规则,完成一些功能。数据访问层:和数据库打交道,进行数据的查询和操作。三层架构主要体现出对程序分而治之的思想,数据访问层只负责提供原始数据,并不需要业务逻辑是什么;业务逻辑层调用数据访问层提供的方法,实现一些业务逻辑,本身不需要了解数据访问层的实现;表示层直接调用业务逻辑提供的方法,把数据呈现给用户,同样,它也不需要了解业务逻辑层和数据访问层是怎么实现的。这样的好处就是降低耦合,易于程序的维护和扩展,每一层都可以由不同的团队来开发,便于分工。.NET/C#试题专栏第3页共7页第2部分C#基本语法1.C#中的循环方法:1)do:先循环后判断循环条件Do{//循环体}while(循环条件);2)while:根据条件判断是否循环While(循环条件){//循环体}3)for:可以指定循环次数,递增量等,功能强大for(初始值;条件;递增){//循环体}4)foreach:遍历集合,效率最好foreach(类型变量in集合){//循环体}2.C#中的三元运算符:表达式?结果1(表达式为true时执行):结果2(表达式为false时执行)3..NET中所有类型的基类是Object4.运算符&和运算符&&:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and).5.C#中的访问修饰符private、protected、public、internal的访问权限:(1)private:私有成员,在类的内部才可以访问。(2)protected:保护成员,该类内部和继承类中可以访问。(3)public:公共成员,完全公开,没有访问限制。(4)internal:在同一命名空间内可以访问。7.在循环语句中break语句和continue语句的用途:break语句用于终止循环,当break语句执行后,该循环未执行的循环体不再被执行,而是转而执行循环语句的下一条语句;continue语句用于中止执行本次循环体,即马上开始下一次循环,而忽略循环体余下的语句。8.C#中的using关键字用于引入名称空间或者使用非托管资源。9.C#中的new关键字用于新建实例或者隐藏父类方法。10.C#中的swtich语句的一般形式为switch(expr1),其中,expr1是一个整数表达式。因此传递给switch和case语句的参数应该是int、short、char或者byte。而string都不能作用于swtich。11.C#中的数组没有length()这个方法,有length的属性。String有length()这个方法。12..NET/C#试题专栏第4页共7页13.构造函数可以用private修饰;构造函数必须与类名相同;构造函数可以带入口参数;构造函数不可以声明返回类型。14.C#中的值类型与引用类型大多数编程语言提供内置的数据类型(比如整数和浮点数),会在作为参数传递时被复制(即,它们通过值来传递)。在.NETFramework中,这些称为值类型。值类型没有与存储类的实例相关的系统开销,并且它们不需要构造函数。在内存中,值类型变量存放的是实际的值,其位于堆栈中,大多数数据类型、枚举、结构体都是值类型。引用类型的变量又称为对象,可存储对实际数据的引用。在内存中,引用类型变量存放的是地址,其位于堆中,接口、类、字符串、数组都是引用类型。15.装箱:把一个值类型的数据转换为引用类型的数据的过程叫装箱。当整数a赋值给一个object对像时,整数a将会被装箱。拆箱:把一个引用类型的数据转换为值类型的数据的过程叫拆箱。16.DateTime是Struct类型,属于值类型,值类型不能取值为null,只有引用类型才能被赋值null17.对比C#中的struct与class结构和类具有大体的语法,但是结构受到的限制比类要多。(1)struct是值类型,class是引用类型(2)struct不能被继承,class可以被继承(3)struct默认的访问权限是public,而class默认的访问权限是private.(4)struct不能由程序员声明构造函数,即使是默认(不带参数)的构造函数,同样也不能有析构的处理部分。这是因为Struct的构造函数是由编译器自动生成的。Struct的用途是那些描述轻量级的对象,例如Line,Point等,并且效率比较高。(5)struct的new和class的new是不同的。struct的new是执行构造函数创建一个新实例再对所有的字段进行复制。而class则是在堆上分配一块内存然后再执行构造函数。因此struct的内存并不是在new的时候分配的,而是在定义的时候分配。18.19.C#中的方法重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。20.Strings=newString(xyz);创建了几个StringObject?答:两个对象,一个是“xyx”,一个是指向“xyx”的引用对像s。21.在C#中,stringstr=null与stringstr=“”的区别。答:stringstr=null是不给其分配内存空间,而stringstr=“”给它分配长度为空字符串的内存空间.22.floatf=-123.567F;inti=(int)f;i的值是_____?23.a=10,b=15,在不用第三方变题的前提
本文标题:C#知识点汇总
链接地址:https://www.777doc.com/doc-4454095 .html