还剩10页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
C#基础知识点
1.面向对象先是将对象抽出来构造成一个仿真的环境,然后在这个环境里,把与最终要解决的问题间建立一个方法 封装就是用一个框架把数据和代码组合在一起,形成一个对象遵循面向对象数据抽象的要求,一般数据都被封装起来,也就是外部不能直接访问对象的数据,外部能见到的只有提供给外面访问的公共操作也称接口,对象之间联系的渠道在C#中,类是支持对象封装的工具,对象则是封装的基本单元 继承是指这样一种能力它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展使用继承而产生的类被称为派生类或者子类,而被继承的类则称为基类、超类或父类 多态也是面向对象语言的基本特征之一,是指在程序执行之前无法根据函数名和参数确定调用哪一个操作,而是程序执行过程中,根据实际运行情况动态确定,从而带来编程高度的灵活性实现多态的方法是使用虚方法Virtual
2.值类型和引用类型值类型包括简单类型、结构体类型和枚举类型,引用类型包括自定义类、数组、接口、委托等栈是操作系统分配的一个连续的内存区域,用于快速访问数据因为值类型的容量是已知的,因此它可存储在栈上而托管堆是CLR在应用程序启动时为应用程序预留的一块连续内存区,是用于动态内存分配的内存区,引用类型的容量只有到运行时才能确定,所有用堆来存储引用类型
3.new关键字作为运算符可以创建对象和调用构造函数;例Class_TestMyClass=newClass_Test;例intmyInt=newint; 作为修饰符可以用于向基类成员隐藏继承成员,实现派生类中隐藏基类的virtual方法,不能和override共存; 作为约束可以在泛型声明中约束可能用作类型参数的参数类型集合数组是.netframework定义的最基本的集合类型集合类ArrayList使用大小可按需动态增加的数组实现IList接口BitArray管理值的压缩数组,该值表示为布尔值,true表示位是打开的
(1),false表示位是关闭的
(0)CaseInsensitiveComparer比较两个对象是否相等,比较时忽略字符串的大小写CollectionBase为强类型集合提供abstract基类Comparer比较两个对象是否相等,其中字符串比较是区分大小写的DictionaryBase为键/值对的强类型集合提供abstract基类Hashtable表示键/值对的集合,这些键/值对根据键的哈希代码进行组织Queue表示对象的先进先出集合ReadOnlyCollectionBase为强类型非泛型只读集合提供abstract基类SortedList表示键/值对的集合,这些键值对按键排序并可按照键和索引访问Stack表示对象的简单的后进先出非泛型集合C#运算符is/as
1、类型检查的效率不一样is需要做两次对象的类型检查,而as需要做一次对象类型检查,再加一次null的检查
2、is的检查规律A:检查一个对象是否兼容于其他指定的类型并返回一个Bool值如果是目标类型或是其父类型的话就返回为true,否为false永远不会抛出异常B:如果对象引用为null,则返回为false,因为没有对象可以检查其类型
3、as的检查规律A:检查对象类型的兼容性,并返回转换结果,如果不兼容则返回null;B:不会抛出异常;C:如果结果判断为空,则强制执行类型转换将抛出NullReferenceException异常;D:用as来进行类型转换的时候,必须是目标类型或者转换目标类型的派生类
4、as运算符只执行引用转换和装箱转换;is运算符只考虑引用转换、装箱转换和取消装箱转换
5、使用as操作符有如下几点限制A:不用在类型之间进行类型转化B:不能应用在值类型数据
6.C#的特点简洁的语法、面向对象设计、与Web的紧密结合、完整的安全性与错误处理、版本处理技术、灵活性与兼容性
7.C#有几种声明关键字?public字段、属性和方法均为公开的,不仅类中的其它成员能访问到,还可以通过类的实例访问的到private字段、属性和方法均为私有的,只能被类中的其它成员访问到,不能通过类的实例访问protected包含private特性,而且protected修饰的字段、属性和方法能被子类访问到internal,在同一个程序集中和public一样,但是不能被其它程序集访问,而且子类的话,只能被同一个命名空间的子类访问到Sealed,密封类不能被继承密封方法会重写基类中的方法,但其本身不能在任何派生类中进一步重写当应用于方法或属性时,sealed修饰符必须始终与override一起使用
8.字符串常用操作
1.取字符串长度stringstr=chain;intstrLength=str.Length;
2.字符串相加
3.截取字符串的一部分strings1=str.Substring02字符串.Substring起始位置,截取位数;
4.清除字符串前后包含的空格stringstr=hello;str=str.Trim;
5.替换字符串字符串变量.replacestr1str2stringstr=你好;str=str.Replace你他;属性和变量的区别属性与成员变量类似,它们都提供数据存储,但属性的功能远比成员变量强大属性由特殊方法(Get和Set访问器)访问Get和Set访问器允许在设置或检索属性之后验证属性值、执行其他代码或执行其他任务static的作用,用法static意思是静态,可以修饰类、字段、属性、方法标记为static的就不用创建实例对象调用了,可以通过类名直接点出来static三种用法
1.用于变量前,表示每次重新使用该变量所在方法、类或自定义类时,变量的值为程序这次运行最后一次为变量赋值时的值,这个方法称为静态函数privatevoids{staticinta=1;a++;}方法第一次调用结束后a在内存内值为2;方法第二次调用结束后a在内存内值为3;
2.在方法(函数)前用static修饰,表示此方法为所在类或所在自定义类所有,而不是这个类的实例所有,这个方法称为静态方法
3.用于class前,说明此类型无法新建实例,简单点说这个类型的方法全是静态方法,这个类里的非静态方法是不能使用的,这个类型称为静态类.比如C#控制台操作的Cancle类里面的成员就被标记为静态的,可以直接用Concle.直接点出来使用如果没有标记为静态就要通过创建实例对象来调用,比如说动态字符串StringBuilder就要new一个实例来调用ref和out
1、ref传进去的参数必须在调用前初始化,out不必,
2、ref传进去的参数在函数内部可以直接使用,而out不可
3、ref传进去的参数在函数内部可以不被修改,但out必须在离开函数体前进行赋值装箱拆箱装箱是将值类型转换为引用类型;拆箱是将引用类型转换为值类型利用装箱和拆箱功能,可通过允许值类型的任何值与Object类型的值相互转换,将值类型与引用类型链接起来例如intval=100;objectobj=val;Console.WriteLine“对象的值={0}obj;这是一个装箱的过程,是将值类型转换为引用类型的过程intval=100;objectobj=val;intnum=intobj;Console.WriteLinenum:{0}num;这是一个拆箱的过程,是将值类型转换为引用类型,再由引用类型转换为值类型的过程泛型在泛型类型或泛型方法的定义中,类型参数是一个占位符(placeholder),通常为一个大写字母,如T在客户代码声明、实例化该类型的变量时,把T替换为客户代码所指定的数据类型泛型类,如泛型概述中给出的MyListT类,不能用作as-is,原因在于它不是一个真正的类型,而更像是一个类型的蓝图要使用MyListT,客户代码必须在尖括号内指定一个类型参数,来声明并实例化一个已构造类型(constructedtype)这个特定类的类型参数可以是编译器识别的任何类型可以创建任意数量的已构造类型实例,每个使用不同的类型参数,如下MyListMyClasslist1=newMyListMyClass;MyListfloatlist2=newMyListfloat;MyListSomeStructlist3=newMyListSomeStruct;C#回收机制对象的生命周期计算对象大小——查找可用内存——初始化对象——使用对象——摧毁对象CLR会在合适的时候进行执行垃圾回收来释放不再使用的内存“重载”与“重写”有什么区别overload重载就是在同一个类中,方法名相同,参数列表不同参数列表不同包括参数的个数不同,参数类型不同等override:说的是两个类继承子类重写父类的方法,在调用的时候,子类的方法会覆盖父类的方法,也就是会调用子类的方法在父类中的方法必须有修饰符virtual,而在子类的方法中必须指明override方法名称必须相同,参数也要相同重写格式父类中publicvirtualvoidMethod{}子类中:publicoverridevoidMethod{}重写以后,用父类对象和子类对象访问Method方法,结果都是访问在子类中重新定义的方法,父类的方法相当于被覆盖掉了子类中为满足自己的需要来重复定义某个方法的不同实现重写是发生在父类与子类之间的关系具体来讲就是子类可以重写父类的现有的方法它要求子类的方法名称及参数必须与父类完全一致比如吃饭,父亲可以吃两碗面,孩子同样也是吃面,却只能吃一碗重载则主要是发生在同一个类当中的,它通过多个名称相同的方法,但方法参数不相同,或者方法返回类型不相同来加以区别其中,方法参数不相同包括以下几种情况参数的个数不相同,参数的类型不相同,参数的对应位置不相同需要说明的是,重载同样可以应用到父类与子类当中即子类重载了父类的方法理解委托委托是一种定义方法签名的类型,可以与具有兼容签名的任何方法关联,可以通过委托调用方法委托用于将方法作为参数传递给其他方法时间处理程序就是通过委托调用的方法数据字典/ArrayListArrayList是一种动态数组,位于System.Collections命名空间中,它提供了动态的增加和减少元素,实现了ICollection和IList接口关于AppDomain的作用,说几个常用的就行了AppDomain是什么当一个程序集被执行时,系统就会自动为其创建一个AppDomain,每一个AppDomain属于某个进程,一个进程内可以有多个AppDomain;每个AppDomain创建时都有个默认的名称,该名称就是加载的程序集的名称带扩展名.exe同一windows进程内的不同AppDomian之间可以互相共享资源,如CLR,基本.NET类型,地址空间及线程程序集在AppDomain中的调用在同一进程内,如果不同的AppDomain调用同一Assembly会有以下两种情况
1、会在每个AppDomain中加载该Assembly并为各AppDomain所调用;
2、会在该进程内,不在任何的AppDomain中单据加载该Assembly,然后同一进程内的所有AppDomain都可以对其进行调用这种方式加载的程序集(Assembly)称为域无关DomainNeutral的AppDomain和线程的关系式正交的;n---n的关系注意当AppDomain加载了某个Assembly后就无法将其单独卸载,不过可以讲AppDomain卸载掉卸载AppDomain时CLR会卸载当前在该AppDomain执行的所有线程,如果此时在执行非托管代码就可能产生问题,并且改AppDomain中所有的托管对象也会被垃圾回收器强制回收;AppDomain的孤立性1)、一个AppDomain可以独立于其他的AppDomain被卸载掉;2)、一个AppDomain不能放问其他AppDomain内的Assembly和对象;3)、若没有发生跨边界的异常抛出,一个AppDomain拥有自己独立的异常管理策略这也就意味着同一进程内的某一AppDomain发生异常不会影响到其他的AppDomain4)、每个AppDomain可以定义独自的程序集代码访问安全策略;5)、每个AppDomain可以定义独自的规则,以便在CLR加载前定位程序集的位置
19.stringstr=和stringstr=null有什么区别?string str = null 是将null赋给栈中的指针(是一个空指针),指向的堆不分配内存空间而string str = 是给它栈中赋一个指针,指向堆里的一个空内存空间
20.抽象类、接口的理解你用过没有?在哪用的?相同点1都可以被继承2都不能被实例化3都可以包含方法声明4派生类必须实现未实现的方法区别1抽象基类可以定义字段、属性、方法实现接口只能定义属性、索引器、事件、和方法声明,不能包含字段2抽象类是一个不完整的类,需要进一步细化,而接口是一个行为规范微软的自定义接口总是后带able字段,证明其是表述一类“我能做”3接口可以被多重实现,抽象类只能被单一继承4抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中5抽象类是从一系列相关对象中抽象出来的概念,因此反映的是事物的内部共性;接口是为了满足外部调用而定义的一个功能约定,因此反映的是事物的外部特性6接口基本上不具备继承的任何具体特点它仅仅承诺了能够调用的方法7接口可以用于支持回调而继承并不具备这个特点8抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然您也可以声明为虚的9如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法
21.常用字符串操作方法formatsubstringisNullOrEmpty...谈谈对反射的理解和应用,优缺点反射,Reflection,通过它我们可以在运行时获得各种信息,如程序集、模块、类型、字段、属性、方法和事件 通过对类型动态实例化后,还可以对其执行操作 简单来说就是用string可以在runtime为所欲为的东西,实际上就是一个.net framework内建的万能工厂优点反射提高了程序的灵活性和扩展性,降低耦合性,提高自适应能力它允许程序创建和控制任何类的对象,无需提前硬编码目标类;缺点
(1)性能问题使用反射基本上是一种解释操作,用于字段和方法接入时要远慢于直接代码因此反射机制主要应用在对灵活性和扩展性要求很高的系统框架上,普通程序不建议使用
(2)使用反射会模糊程序内内部逻辑程序员希望在源代码中看到程序的逻辑,反射等绕过了源代码的技术,因而会带来维护问题反射代码比相应的直接代码更复杂
23.classA{...}classB:A{...}问ListA与ListB有什么联系ListA包含ListB但ListB内容多于ListA(继承)。