《2022年C#知识点总结表 .pdf》由会员分享,可在线阅读,更多相关《2022年C#知识点总结表 .pdf(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、敬杰.NET课程 c#学习总结表姓名:一、 C# 知识点汇总(用标记,自己可增加知识点)掌握程度知识点不理解了解理解熟练精通备注语句结构枚举值类型,引用类型装箱拆箱string和 StringBuilder 数组集合类方法参数( ref,out,params)分部方法,扩展方法,匿名方法构造函数字段,属性索引器委托事件静态类,密封类,抽象类接口虚方法,重载方法继承二、 C# 学习心得体会C#基础的学习已经结束从这十天的时间中发现了许多在学校没有注意也从来没用过的知识点,在这里对每个知识点谈一下心得和理解。1 语句:语句是构造所有C#程序的构造块,通常以分号结束语句。一个大括号括起来一系列语句构
2、成的代码块。语句可以声明局部变量或常数,调用方法, 创建对象或将值赋予变量、属性或字段。语句重点学习的是选择语句,循环语句,跳转语句,异常处理语句。A,条件语句包括:if else ,switch .case.default if else语句的基本结构是1) if(bool 类型的判断语句) 当 bool 值为 true时执行的代码 else 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 16 页 - - - - - - - - - - 当 bool 值为 false时执行的代码 2) s
3、witch .case.default的基本用法为:switch (需要判断的变量)case 变量的值 : 当变量的值与该变量相同时执行的代码 break ;defult:break ;B 。循环语句: while 语句, do.while语句, for 语句, foreach语句1)While 的用法:while (返回值为bool 型的变量) 当 bool 值为 true时执行该段代码,否则跳出循环 2)do .while的用法:do 无论 while 后的 bool 值是否为空该段代码都会被执行,若 bool 值为 false会在执行一次后跳出循环while(返回值为 bool 型的变量
4、 ) 3)for循环的用法:for (可赋值的变量=初始值;变量的范围;变量依次变化量) 满足条件执行的代码 刚知道的for 循环的用法:for (DateTime dt = DateTime.Parse(2010 - 7- 1); dt DateTime.Now; dt=dt.AddDays(1) Console.WriteLine(dt.ToString(); 4)foreach语句的用法foreach(要循环的每个变量的类型变量名 in 要循环的集合或数组) 遍历每个集合或数组中的成员 C,跳转语句主要有:goto ,continue ,break , throw 1,goto 语句:跳
5、转到特定的位置例如:goto Mark; Console.WriteLine(第一行 ); Mark: Console.WriteLine(第二行 ); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 16 页 - - - - - - - - - - 在以上代码中程序遇到goto 就转到 Mark 处因此不会执行Console.WriteLine(第一行 );而直接执行Console.WriteLine(第二行 ); 2,break :跳出循环3,continue :跳出本次循环4,throw
6、 :抛出异常C异常处理语句: 异常处理有try ,catch ,finally构成, try语句是必须存在的,catch和 finall可全出现也可省略一个但是必须出现一个try 可能会出现异常 Catch 捕捉异常 Finally 代码执行完后释放资源 语句应用时基本不会出现问题,但是可能是代码写的有点少说熟悉似乎还达不到那一级别只能说是理解了,以后还需多多练习。2结构结构是一种值类型继承自ValueType ,通常用于封装小型相关变量组,结构与类不同无法用 new 运算符实例化,结构中有默认的参数为0 的构造函数,与类不同的是,当你为结构自定义一个构造函数时它的默认构造函数不会消失,因此定
7、义结构的构造函数时必须带有参数。结构可为null值,结构可以实现接口。结构的声明需要关键字struct,结构的修饰符可以是 public ,internal默认修饰访问符为interal 3,枚举用来声明枚举的关键字为:enum 枚举类型也是值类型。例如:enum Menu 文件 = 1, 编辑 = 2, 视图 = 4, 1,2,4为枚举数的值,默认情况下为0,1,2枚举的值可以为除了char 类型以外的任何整型,后面每个枚举数的值一次递增1。当第二个枚举名为0. 第一个默认时,第一个枚举的值也为 0,枚举中枚举的值可以重复。枚举类型的属性枚举又称为位标志例如:Flags enum Menu
8、文件 =1, 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 3 页,共 16 页 - - - - - - - - - - 编辑 =2, 视图 =4 Menu m = Menu. 编辑|Menu . 文件 ; Console.WriteLine(m); 把枚举数的值定义为1,2,4等 2 的倍数可以输出多个枚举值。按枚举的值在程序中自动输出枚举的名称 enum Sex/定义性别 男, 女, class Program static void Main(string args) foreach (strin
9、g s in Enum.GetNames(typeof(Sex) Console.WriteLine(int)Enum.Parse(typeof(Sex),s)+s+,); 4,值类型和引用类型值类型派生自System. ValueType每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。值类型包括:简单类型,枚举类型,结构类型。引用类型:引用类型的变量又称为对象,可存储对实际数据的引用。给变量赋值时值类型仅仅把值传给变量,而引用类型则把地址传给变量,String是特殊的引用类型5,装箱和拆箱装箱是把值类型转化成引用类型,拆箱即是取消装箱,是把应用类型转化成值类型,装箱时没有要求,在
10、拆箱时必须知道装箱前变量的类型,拆箱后的变量类型必须与装箱前相同。6String和 StringBuilder string是一个特殊的引用类型,是任何程序使用最多的类型之一,string是直接赋值来构造的,不能用new来实例化, string一旦定义是不可变的,如果字符串发生变化就会生成新的字符串。当定义一个字符串时在托管堆中给字符串分配一个空间,当字符串变化时托管堆中为新的值分配空间,旧的空间与字符串的链接会自动断开,通过垃圾回收,收回该字符串在托管堆中的空间,例如:string a=abcs;string b=a;sting a=ebe当 b=a时把托管堆中的a 的地址也指向b 当 a
11、发生变化时托管堆中为a 开辟一个新的空间,把a与新空间链接起来,但b 的链仍然不变,当b 再放生变化时“abcs”在托管堆中的空间会被垃圾回收。string中主要的函数为:精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 16 页 - - - - - - - - - - compare:比较两个指定的string对象返回值为:int类型当两个string变量相同时返回 0,否则返回 -1 ;concat : 把 其 他 形 式 转 换 成 字 符 串 形 式例 如 :inta=1,2,3; st
12、ring b= string.Concat(a1);他把数组a 转变成字符串形式的数组例 如string a = dddd;string b = wwww;string c = string.Concat(a, b);Console.WriteLine(c);输出结果为dddwwww ,即把两个字符串转变成一个字符串StringBuiler: String是不可变的,如果发生拼接就会造成性能上的浪费。当拼接时string会在托管堆中重新开辟一个空间存放拼接后的字符,这样造成了性能上的浪费,StringBuiler可以有效的对字符串进行动态的操作,通过维护 char 数组来达到操作字符串在下面两
13、种情况下会分配新对象:试图动成构造一个字符串,它的长度超过了事先设置的容量。试图在调用了StringBuilder的 ToString方法之后修改数组。 7 ,数组Array提供了创建、操作、搜索、排序数组的方法,所有Array 是所有用作数组的基类。Array 数组不能 new只能通过CreateInstance方法来创建例如:Array MyArr = Array.CreateInstance(typeof(int), 5); MyArr.SetValue(1, 0); MyArr.SetValue(2, 1); 一维数组的定义四种方式:1,intar=new int21,2 2,inta
14、rr=new int1,2; 3,int arr=new int2;arr0=1; 4,int arr=0,2; 二维数组的定义:int,arr=0,2,4,54; arr10 交错数组:int arr = new int2 new int 1, 2, 3 , new int 4 ; 也可以定义为:int arr = new int2 1, 2, 3 , 4 ; 遍历数组时二维数组用arr.GetLength(0)表示,交错数组用arri.Length表示,数组都为引用类型。8集合集合是一组组合在一起的类似的类型化对象。集合有ArrayList, Quere, Stack ,Hashtable
15、 ,List ArrayList:用法为: ArrayList al = new ArrayList();al.Add(1);当添加的是值类型时会发生装箱,拆箱操作需要使用较多的空间资源Stack 是表示对象先进后出的集合Queue是表示对象先进先出的集合Hashtable :表示键 / 值对的集合,这些键/ 值对根据键的哈希代码进行组织。List :是 ArrayList 类的泛型等效类。该类使用大小可按需动态增加的数组实现IList 泛型接口。 T 是一个类型参数,标明列表中元素的准确类型,而不是ArrayList中的 object中的类型。类型可以是值类型也可以是引用类型。因此不需发生装
16、箱和拆箱操作9类类是一组具有相同数据结构和相同操作的对象的集合。类是对一系列具有相同性质的对象的抽象,是对对象共同特征的描述。类中的成员有: sealed 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 5 页,共 16 页 - - - - - - - - - - 1。c#中的访问修饰符:public ,protected,internal,private,由他们组成的访问级别有:1)public :访问不受限制。2)protected:访问仅限包含类或从包含类派生的类型3)internal:访问仅限于当
17、前程序集。4)private:访问仅限于包含类型。5)protected+internal:访问仅限于当前程序集或从包含类派生的类型。除了 protected+internal,成员或类型只能有一个访问符,结构和类的默认访问权限为internal方法的默认访问权限为:private。 enum默认的成员中的可访问性为public , class中成员的可访问性为private,interface中的成员为public ,struct中成员为private,命名空间不允许有访问修饰符。2。构造函数:每个结构和类都有默认的构造函数,类中加入自定义的构造函数后,默认的会自动消失,结构中默认的构造函数
18、不会消失,因此结构中的构造函数必须加参数。构造函数初始化所有字段, 它的方法名与类名相同且无返回值类型,实例化类时new的作用: 1。分配内存 2 。实例化类中的字段和方法类中出现静态构造函数的方法为:1。自定义一个静态构造函数,2。定义一个静态的字段有多个构造函数时先调用静态构造函数,静态构造函数不能有参数和访问修饰符。3。析构函数析构函数无访问修饰符,如:MyClass() 析构函数一般不使用,当一段代码占用大量资源时才会用析构函数释放资源。不能在结构中定义析构函数。只能对类使用析构函数。一个类只能有一个析构函数。无法继承或重载析构函数。无法调用析构函数。它们是被自动调用的。析构函数既没有
19、修饰符,也没有参数。4。索引器索引器允许类或结构的实例就像数组一样进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。使用索引器:1。使用索引器可以用类似于数组的方式为对象建立索引。2。get 访问器返回值。set 访问器分配值。3。this 关键字用于定义索引器。4 。value 关键字用于定义由 set 索引器分配的值。5。 索引器不必根据整数值进行索引,由您决定如何定义特定的查找机制。6。 索引器可被重载。7。 索引器可以有多个形参,例如当访问二维数组时。 class DayCollection string days = Sun, Mon, Tues, Wed, Thurs,
20、 Fri, Sat ; private int GetDay(string testDay) int i = 0; foreach (string day in days) if (day = testDay) 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 6 页,共 16 页 - - - - - - - - - - return i; i+; return -1; public int thisstring day get return (GetDay(day); class Program stat
21、ic void Main(string args) DayCollection week = new DayCollection(); System.Console.WriteLine(weekFri); System.Console.WriteLine(weekMade-up Day); 改程序输出结果为:5 -1 public int thisstring day get return (GetDay(day); 为索引器,索引器允许以数组的形式访问元素,可以定义整形和非整形两种下标。10, 方法参数方法的传递时参数:分引用类型,值类型,ref参数, out 参数, params 参数1。
22、当参数为值类型时这时方法中改变参数的值是没有用的例如: public void method1(int i) Console.Write(i); i = 100; static void Main(string args) 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 7 页,共 16 页 - - - - - - - - - - Myclass mc = new Myclass(); int i = 7; mc.method1(i); Console.WriteLine(i); 打印出的结果为:7,7
23、。具体实现为:int类型为值类型,当调用mc.method1(i)时 i 把值传给方法method1,也就是调用方法时把7 传给 method1 的 i ,即输出 7,当方法中 i=100时,也就是令7=100;在 main 方法中 i 的值是不发生变化的。2。当参数是值类型时在参数前加ref会把值参数的地址传给方法,这与引用类型基本是一样的例如: public void Method3(ref string i) Console.WriteLine(i); i = 100; static void Main(string args) Myclass mc = new Myclass(); i
24、nt i = 7; mc.Method3(ref i); Console.WriteLine(i); 输出结果为7,3 具体实现为: ref把 i 的地址传给方法Method3 当空间中i 发生变化时地址空间也变化,所以方法结束后i 的值也变化。 3 。out 作参数能够返回多个值。例如: public void Method4(out int i, out string j) i = 100; j = 10; Console.WriteLine(i+j); static void Main(string args) MyClass mc = new MyClass(); int i = 10
25、; string j; mc.Method4(out i, out j); Console.WriteLine(i); Console.WriteLine(j); 结构为: 100 10,100,10在调用时变量不需要赋值,在方法中会把赋的值修改4。方法中使用动态参数例如:精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 8 页,共 16 页 - - - - - - - - - - public void Mehtod5(string t, params int arrint) foreach (int i
26、 in arrint) Console.WriteLine(i); static void Main(string args) Program mc = new Program(); int arrint = new int 1, 2, 3 ; mc.Mehtod5(dd, arrint); 输出结果为: 1 2 3 params使参数为数组,数组的长度是可变的5。当方法中的参数为引用类型时,传递的是地址,例如: public void method1(intarrint) foreach (int a in arrint) Console.WriteLine(a); arrint0 = 12
27、22; static void Main(string args) int arrint = 1,2,3,4; Myclass mc = new Myclass(); mc.method1(arrint); foreach (int a in arrint) Console.WriteLine(a); 输出结果为: 1,2 ,3,4 1222,2,3,4 地址传给方法后在方法中参数变化即地址也发生变化,再调用时就发生变化。11, 分部方法,扩展方法,匿名方法精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第
28、9 页,共 16 页 - - - - - - - - - - 分部方法是在分部类中定义的分部方法,关键字为:partial,分部方法是在一个分部类中声明方法签名,在另一个分部类中定义方法体,分部方法也可在一个类中定义,但是少了分部方法的作用。分部方法的返回值必须为void ,可以有ref但不能有out 参数,分部方法为隐式private因此不能为virtual,分部方法不能扩展,分部方法可以有static和unsafe修饰符,分部方法可以为泛型,不能将委托转换为分部方法。不能为静态类定义扩展方法扩展方法:扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原
29、始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。扩展方法是在静态类中定义的静态方法。扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。仅当您使用 using 指令将命名空间显式导入到源代码中之后,扩展方法才位于范围中。例如:public static int WordCount(this string str) return str.Split(new char , ., ? , StringSplitOptions.RemoveEmptyEntries).Length;
30、 该方法是为string的扩展方法匿名方法:匿名方法不必定义方法名,通过使用匿名方法,由于您不必创建单独的方法,因此减少了实例化委托所需的编码系统开销。匿名方法的参数的范围是“匿名方法块”。例如:button1.Click+=delegate(System.Object o,System.EventArgs e) System.Windows.Forms.MessageBox.Show(Click!); ; 12 字段,属性字段是类或结构中的对象或值类和结构使用字段可以封装数据。字段通常应为 private。外部类应该通过方法、属性或索引器间接访问字段。字段的初始化紧靠调用对象实例的构造函数之
31、前。如果构造函数为字段赋值,则该值将覆盖字段声明期间给出的任何值。可以将字段声明readonly 。只读字段只能在初始化期间或在构造函数中赋值。static readonly 字段非常类似于常数,只不过 C# 编译器不能在编译时访问静态只读字段的值,而只能在运行时访问。属性:它们提供灵活的机制来读取、编写或计算私有字段的值。可以像使用公共数据成员一样使用属性,但实际上它们是称作“访问器”的特殊方法。这使得可以轻松访问数据,属性通过 get 和 set 访问器来操作数据。13,委托委托是一种引用方法的类型,一旦为委托分配了方法委托将与改该方法具有完全相同的行为。委托的特点:1。委托类似于 C+
32、函数指针,但它们是类型安全的。2。委托允许将方法作为参数进行传递。3。委托可用于定义回调方法。4。委托可以链接在一起;例如,可以对一个事件调用多个方法。5。方法不必与委托签名完全匹配。委托的使用:1。委托的定义:delegate void Dele(int i); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 10 页,共 16 页 - - - - - - - - - - 2 。定义方法:public void Method(int i) Console.WriteLine(参数为 :0,i); 3。关
33、联委托和方法:Program pro = new Program(); Dele del = new Dele(pro.Method); del(100); 下面是一个委托的例子:public class MethodClass public void Method1(string message) public void Method2(string message) MethodClass obj = new MethodClass(); Del d1 = obj.Method1; Del d2 = obj.Method2; Del d3 = DelegateMethod; /Both t
34、ypes of assignment are valid. Del allMethodsDelegate = d1 + d2; allMethodsDelegate += d3; 13,事件事件:类或对象可以通过事件向其他类或对象通知发生的相关事情。发送(或引发)事件的类称为“发行者” ,接收(或处理)事件的类称为“订户”。事件本质上是一组方法。事件的使用步骤: delegate void DL(); class TimeOpe public event DL sj; int step; public int Step set step = value; public void Begin()
35、 while (step 0) Console.WriteLine(下课 ); Console.WriteLine(DateTime.Now.ToString(); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 11 页,共 16 页 - - - - - - - - - - Thread.Sleep(2000); step-; sj(); class myclass static void Main() TimeOpe to = new TimeOpe(); to.sj += show; to.Step
36、 = 1; to.Begin(); static void show() Console.WriteLine(上课); Console.WriteLine(DateTime.Now.ToString(); 输出结果为:下课2010-7-26 16:38:18 上课2010-7-26 16:38:20 定义一个与方法相应的委托定义关于方法和委托的事件定义事件方法订阅方法响应该事件14静态类,密封类,抽象类1, )密封类关键字为: sealed ,放于class前,密封类不能用在基类,密封类的主要作用为:防止派生2)静态类静态类在加载包含该类的程序或命名空间时由 .NET Framework 公共
37、语言运行库 (CLR) 自动加载。静态类的主要功能:1. 它们仅包含静态成员。2. 它们不能被实例化。3. 它们是密封的。4. 它们不能包含实例构造函数。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 12 页,共 16 页 - - - - - - - - - - 静态类中的构造函数不能有访问修饰符和参数,静态类不能被继承也不能继承其他自定义的类。静态方法可以被重载但不能被重写3)抽象类关键字为: abstract。抽象类不能被实例化。抽象类中的实例化函数不可以被调用,只有通过子类来调用。静态函数可通过类
38、名. 方法名来调用。抽象类中不能有抽象构造函数也不能有抽象字段。抽象类的访问修饰符不能为private 15,接口接口的关键字为:interface,接口中只能有public访问修饰符而且public不能手动再次输出。接口也不能被实例化。16,虚方法,重载方法虚方法:有关键字virtual的方法为虚方法,虚方法可以在子类中重写,重写的关键字为 override,在子类中也可不重写,子类中的重写覆盖父类的虚方法。重载方法:是方法名相同,方法后的参数类型或数量不同。17,继承继承的方法在子类后加冒号,冒号后加父类名例如:public class A public a() Console.Write
39、Line(A的构造函数 ); public class B : A public b() Console.WriteLine(B的构造函数 ); static void Main() B b=new B(); 新类(即派生类)将获取基类的所有非私有数据和行为以及新类为自己定义的所有其他数据或行为。构造函数的调用:以上代码为例:当实例化B 时,先调用A 的构造函数,再调用B 的构造函数, B的构造函数默认继承base() 若代码为下例:public class A public A(int i) Console.WriteLine(A的构造函数 +i); 精品资料 - - - 欢迎下载 - -
40、- - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 13 页,共 16 页 - - - - - - - - - - public class B : A public B() Console.WriteLine(B的构造函数 ); 这个例子是不正确的,当实现B 的构造函数时会向上查找与B类构造函数匹配的A 的构造函数 B构造函数默认继承base(),但 A中不存在构造函数public A() Console.WriteLine(A的构造函数 ); base() 表示父类对象,this表示本类对象。继承的子类中可以有和父类方法签名相同的方法当调用时父
41、类方法被隐藏,若在子类方法名前加 new时称为显示隐藏否则为隐式隐藏。不允许循环继承,继承时调用只会影响子类。方法的重写:在父类的方法前加virtual说明方法定义为虚方法,可以在子类中重写该方法,重写的是前一个virtual的方法。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 14 页,共 16 页 - - - - - - - - - - Welcome To Download ! 欢迎您的下载,资料仅供参考!精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 15 页,共 16 页 - - - - - - - - - - 文档编码:KDHSIBDSUFVBSUDHSIDHSIBF-SDSD587FCDCVDCJUH 欢迎下载 精美文档欢迎下载 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 16 页,共 16 页 - - - - - - - - - -
限制150内