收藏 分享(赏)

C#学习笔记(个人).docx

上传人:dreamzhangning 文档编号:3066378 上传时间:2018-10-02 格式:DOCX 页数:155 大小:917.41KB
下载 相关 举报
C#学习笔记(个人).docx_第1页
第1页 / 共155页
C#学习笔记(个人).docx_第2页
第2页 / 共155页
C#学习笔记(个人).docx_第3页
第3页 / 共155页
C#学习笔记(个人).docx_第4页
第4页 / 共155页
C#学习笔记(个人).docx_第5页
第5页 / 共155页
点击查看更多>>
资源描述

1、一、C#基础知识(1)1、 C#中 foreach 用法 foreach 循环用于列举出集合中所有的元素,foreach 语句中的表达式由关键字in 隔开的两个项组成。in 右边的项是集合名,in 左边的项是变量名,用来存放该集合中的每个元素。该循环的运行过程如下:每一次循环时,从集合中取出一个新的元素值。放到只读变量中去,如果括号中的整个表达式返回值为 true,foreach 块中的语句就能够执行。一旦集合中的元素都已经被访问到,整个表达式的值为 false,控制流程就转入到 foreach 块后面的执行语句。foreach 语句经常与数组一起使用,下面实例将通过 foreach 语句读取

2、数组的值并进行显示。数组的属性:Array.Length 数组的容量利用这个属性,我们可以取得数组对象允许存储的容量值,也就是数组的长度、元素个数,这个比较好理解,数组还有其他的属性,比如数组的维数等,属性的用法比较简单,学会一种,其他的格式基本一致,这里我们就不举例了。当数组的维数、容量较多时,C#提供了 foreach 语句,专门用来读取集合/数组中的所有元素,我们把这种功能叫做遍历。语法书写如下:遍历数组:foreach(type objName in collection/Array)这段语句会逐一检查数组中的所存储的变量值,并且一一将其取出,其中的type 是你所要读取的数组对象将要

3、存储在 objName 变量的数据类型,而objName 是定义了一个 type 类型的变量名,代表每一次从集合和数组(collection/Array)中取得的元素,collection/Array 则是所要存取的数组对象。用这种方法只需写一个 foreach 就可以遍历出除交错数组以外的所有维数的数组。例子:用 foreach 循环一次性遍历 a 数组int, a = new int2, 2, 2 1, 2 , 3,4, 5, 6 , 7,8 ;/定义一个 2 行 2 列 2 纵深的 3 维数组 aforeach(int i in a)Console .WriteLine (i);这两种代

4、码执行的结果是一样的都是 每行一个元素,共 8 行,元素分别是 1 2 3 4 5 6 7 8string数组里面是存放 string 型的值,List是存放 string 类型的对象2、 C#中的 InitializeComponent()方法 InitializeComponent()用于初始化窗体上控件。在每一个窗体生成的时候,都会针对于当前的窗体定义 InitializeComponent()方法,该方法实际上是由系统生成的对于窗体界面的定义方法。/位于.cs 文件之中的 InitializeComponent()方法public Form011() InitializeCompone

5、nt(); 在每一个 Form 文件建立后,都会同时产生程序代码文件.CS 文件,以及与之相匹配的.Designer.CS 文件,业务逻辑以及事件方法等被编写在.CS 文件之中,而界面设计规则被封装在.Designer.CS 文件里,下面代码为 .Designer.CS 文件的系统自动生成的脚本代码。namespace Example_FormTestpartial class frmStudent/ / 必需的设计器变量。/ private System.ComponentModel.IContainer components = null;/ / 清理所有正在使用的资源。/ / 如果应释放

6、托管资源,为 true;否则为 false。protected override void Dispose(bool disposing)if (disposing base.Dispose(disposing);#region Windows 窗体设计器生成的代码/ / 设计器支持所需的方法 - 不要/ 使用代码编辑器修改此方法的内容。/ private void InitializeComponent()this.SuspendLayout();/ / frmStudent/ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 1

7、2F);this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;this.ClientSize = new System.Drawing.Size(292, 273);this.Name = “frmStudent“;this.Text = “学生信息 “;this.MouseClick += new System.Windows.Forms.MouseEventHandler(this.frmStudent_MouseClick);this.KeyPress += new System.Windows.Forms.KeyPre

8、ssEventHandler(this.frmStudent_KeyPress);this.ResumeLayout(false);#endregion在代码之中,可以很容易发现 InitializeComponent()方法和 Dispose()方法,前者为界面设计的变现内容,后者为表单释放系统资源时候执行编码。InitializeComponent()方法反映了窗体设计器中窗体和控件的属性。通常不会在世界上个文件中修改代码。如果更改 InitializeComponent()方法中的相关属性参数,在窗体设计器界面上也会显示出来。我们发现建一个 c#窗体项目,在 Form1.cs 和 For

9、m1.Designer.cs 里分别有一个InitializeComponent()函数Form1.Designer.cs 里的是定义 (函数名后面有大括号包含定义内容)Form1.cs 里的是调用 (函数名后面分号结尾)partial 表示以下创建的是分布类代码也就是说 一个类的定义代码 可以写在两个不同的页面Form1.cs 和 Form1.Designer.cs 注意:InitializeComponent()方法写在前面和后面是有区别的。InitializeComponent()方法是用来初始化窗体组件的,在 InitializeComponent 之前,窗体的各个控件还没有进行初始化

10、,比如说窗体上有一个 TextBoxUserName,在 InitializeComponent 之前它还只是一个TextBox 类型的变量而已,如果在 InitializeComponent 之前调用这个 TextBox 的属性或方法,就会出错。再比如说你拖上取一个 TextBox,它放在 Form 的位置,TextBox 的一些属性。包括 new 这个 TextBox 都放在那个函数里面处理的。我们可以看一下 Form.Designer.cs,在那里找到 InitializeComponent 方法,您会发现窗体对象的初始化都是在那里做的。3、 C# 里面的 #region 是什么意思?

11、#region 是 c#预处理器指令。#region 是一个分块预处理命令,它主要用于编辑代码的分段,在编译时会被自动删除。#region 使你可以在使用 VS 代码编辑器的大纲显示功能时指定可展开或折叠的代码块。例如:#region MyClass definitionpublic class MyClass static void Main() #endregion备注:#region 块必须以#endregion 指令终止。#region 块不能与#if 块重叠。但是,可以将#region 块嵌套在#if 块内,或将#if 块嵌套在#region 块内。 使用#region 就是将一些有

12、关联的代码组织在一起,然后折叠起来。这样你就在一个函数中看不到很长的令人头痛的代码段。 当然这段代码很简单。在实际项目中,你可能看到上百行甚至更多的代码在一个#region 中。如果把它折叠起来。看起来就会很整洁。 region 不适合在大方法中使用,当你在一个方法中使用#region 的时候,停下来想想你刚刚写了什么代码?大多数时候,你可以将这些代码段独立成一个函数。4、C#中 this 的作用在 C#中,this 关键字代表当前实例,我们可以用 this.来调用当前实例的成员方法,变量,属性,字段等; 也可以用 this 来做为参数状当前实例做为参数传入方法. 还可以通过 this来声明索

13、引器。下面介绍 C#中 this 的作用一、C# this 指针的几种用法1、限定被相似的名称隐藏的成员C# 代码 复制public class ThisName public string name = “张三“;public int num = 55;public ThisName() public void GetThisName(string name, int num)name = this.name;/调取全局变量 namenum = this.num;/调取全局变量 numHttpContext.Current.Response.Write(“参数 name 的值为:“+name

14、+“;参数 num 的值为:“+num);/输出结果为“参数 name 的值为张三;参数num 值为:55“2、将对象作为参数传递到别的方法中C# 代码 复制public class ThisFFpublic ThisFF() public string shuju()return “This 指针当做方法传递“;public void f1(ThisFF ff)HttpContext.Current.Response.Write(ff.shuju();public void f()f1(this);/this 在这里可以理解为 ThisFF ff=news ThisFF();当前类的实例Th

15、isFF ff=news ThisFF();/方法实例ff.f();/调用方法 输出结果为: This 指针当做方法传递3、声明索引器C# 代码 复制private int _Sy;public int thisint syget return _Sy;set sy=_Sy;二、C#中 this 的总结1、this 关键字引用被访问成员所在的当前实例。静态成员函数没有 this 指针。this 关键字可以用来从构造函数,实例方法和实例化访问器中访问成员,不能在静态方法。静态属性访问器或者域声明的变量初始化程序中使用 this 关键字,这将会产生错误。 2、在类的构造函数中出现的 this 作为

16、一个值类型表示对正在构造的对象本身的引用。 3、在类的方法中出现 this 作为一个值类型表示对调用该方法的对象的引用。 4、在结构的构造函数中出现的 this 作为一个变量类型表示对正在构造的结构的引用。5、在结构的方法中出现的 this 作为一个变量类型表示对调用该方法的结构。5、 c#.netSuspendLayout 和 ResumeLayout在 Designer 中会看到这两个方法,究竟是做什么用的呢?一般在加载所有控件之前 SuspendLayout 方法,挂起所有控件在界面的逻辑布局事件,等又有布局代码完后再调用 ResumeLayout 事件吧刚才挂起的逻辑布局一并执行。例如

17、我们在设置初始化控件时候,都会用到 Size、Location、Anchor 或 Dock 属性,而每一个属性都会去改变控件在界面上的布局,使得控件,每执行一段代码就就要界面重绘一次,那么我们先挂起所有事件,之后一起执行,这样就可以提高带有许多控件的应用程序的性能。控件的布局逻辑被挂起,直到调用 ResumeLayout 方法为止。当调整控件的多个属性时,将先后使用 SuspendLayout 和 ResumeLayout 方法取消多个 Layout 事件。例如,通常先调用 SuspendLayout 方法,然后设置控件的 Size、Location、Anchor 或 Dock 属性,最后调用

18、 ResumeLayout 方法以使更改生效。注意:为了防止 layout 事件的发生。这个事件将引发重新绘图的事件,如果介面上控件较多的话,改变控件某些属性时,由于不断地重画,性能变低,所以用 suspendlayout 来阻止。resumelayou 可以结束上面的限制。6、 C#中的 set 和 get 方法 在面向对象编程(OOP)中,是不允许外界直接对类的成员变量直接访问的,既然不能访问,那定义这些成员变量还有什么意义呢?所以 C#中就要用 set 和 get 方法来访问私有成员变量,它们相当于外界访问对象的一个通道,一个“接口”。先来看一段代码:class Employeepriv

19、ate string name;private byte age;public string Nameget return name; set name = value; public byte Ageget return age; set age = value; 代码中定义了两个私有变量 name 和 age,当我们不想让外界随意访问该私有变量时,可以使用属性来访问,语法为:public get return ;set = value;当我们使用属性来访问私有成员变量时就会调用里面的 get 方法,当我们要修改该变量时就会调用 set 方法,当然在定义的时候可以只定义一个 get 方法或只

20、定义一个 set 方法。如果只定义 get 方法,那么这个相应变量就是“只读”的;如果只定义 set 方法,那么相应变量就是“只写”的。class Employeeprivate string name;private byte age;public string Nameget return name; set name = value; /*修改后*public byte Ageget return age; set if (value 10 /添加元素openWith.Add(“txt“, “notepad.exe“);openWith.Add(“bmp“, “paint.exe“);o

21、penWith.Add(“dib“, “paint.exe“);openWith.Add(“rtf“, “wordpad.exe“);/取值Console.WriteLine(“For key = “rtf“, value = 0.“, openWith“rtf“);/更改值openWith“rtf“ = “winword.exe“;Console.WriteLine(“For key = “rtf“, value = 0.“, openWith“rtf“);/遍历 keyforeach (string key in openWith.Keys)Console.WriteLine(“Key =

22、 0“, key);/遍历 valueforeach (string value in openWith.Values)Console.WriteLine(“value = 0“, value);/遍历 value, Second MethodDictionary.ValueCollection valueColl = openWith.Values;foreach (string s in valueColl)Console.WriteLine(“Second Method, Value = 0“, s);/遍历字典foreach (KeyValuePair kvp in openWith)

23、Console.WriteLine(“Key = 0, Value = 1“, kvp.Key, kvp.Value);/添加存在的元素tryopenWith.Add(“txt“, “winword.exe“);catch (ArgumentException)Console.WriteLine(“An element with Key = “txt“ already exists.“);/删除元素openWith.Remove(“doc“);if (!openWith.ContainsKey(“doc“)Console.WriteLine(“Key “doc“ is not found.“)

24、;/判断键存在if (openWith.ContainsKey(“bmp“) / True Console.WriteLine(“An element with Key = “bmp“ exists.“);参数为其它类型/参数为其它类型 Dictionary OtherType = new Dictionary();OtherType.Add(1, “1,11,111“.Split(,);OtherType.Add(2, “2,22,222“.Split(,);Console.WriteLine(OtherType12);参数为自定义类型首先定义类class DouCubepublic int

25、 Code get return _Code; set _Code = value; private int _Code;public string Page get return _Page; set _Page = value; private string _Page; 然后/声明并添加元素Dictionary MyType = new Dictionary();for (int i = 1; i kvp in MyType)Console.WriteLine(“Index 0 Code:1 Page:2“, kvp.Key, kvp.Value.Code, kvp.Value.Page

26、); 常用属性名称 说明Comparer 获取用于确定字典中的键是否相等的 IEqualityComparer。Count 获取包含在 Dictionary 中的键/值对的数目。Item 获取或设置与指定的键相关联的值。Keys 获取包含 Dictionary 中的键的集合。Values 获取包含 Dictionary 中的值的集合。常用方法名称 说明Add 将指定的键和值添加到字典中。Clear 从 Dictionary 中移除所有的键和值。ContainsKey 确定 Dictionary 是否包含指定的键。ContainsValue 确定 Dictionary 是否包含特定值。Equal

27、s(Object) 确定指定的 Object 是否等于当前的 Object。 (继承自 Object。)Finalize 允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。)GetEnumerator 返回循环访问 Dictionary 的枚举器。GetHashCode 用作特定类型的哈希函数。 (继承自 Object。)GetObjectData 实现 System.Runtime.Serialization.ISerializable 接口,并返回序列化 Dictionary 实例所需的数据。GetType 获取当前实例的 Type。 (继承自 Obj

28、ect。)MemberwiseClone 创建当前 Object 的浅表副本。 (继承自 Object。)OnDeserialization 实现 System.Runtime.Serialization.ISerializable 接口,并在完成反序列化之后引发反序列化事件。Remove 从 Dictionary 中移除所指定的键的值。ToString 返回表示当前对象的字符串。 (继承自 Object。)TryGetValue 获取与指定的键相关联的值附:Dictionary是一个泛型 他本身有集合的功能有时候可以把它看成数组 他的结构是这样的:Dictionary 他的特点是存入对象是需

29、要与key值一一对应的存入该泛型 通过某一个一定的key去找到对应的值 举个例子: /实例化对象 Dictionary dic = new Dictionary(); /对象打点添加 dic.Add(1, “one“); dic.Add(2, “two“); dic.Add(3, “one“); /提取元素的方法 string a = dic1; string b = dic2; string c = dic3; /1、2、3 是键,分别对应“one”“two”“one” /上面代码中分别把值赋给了 a,b,c /注意,键相当于找到对应值的唯一标识,所以不能重复 /但是值可以重复 如果你还看不懂我最后给你举一个通俗的例子 有一缸米,你想在在每一粒上都刻上标记,不重复,相当于“键”当你找的时候一一对应不会找错,这就是这个泛型的键的-作用,而米可以一样,我的意思你明白了吧?c# 对 dictionary 类进行排序用什么接口实现如果使用.Net Framework 3.5 的话,事情就很简单了。呵呵。 如果不是的话,还是自己写排序吧。 using System;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 专业基础教材

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报