♠关于代码规范
骆驼命名法:第一个单词首字母小写,后面单词首字母大写 userPassword(普通变量,局部变量,字段)
帕斯卡命名法:每个单词都首字母都大写GetName()(方法名,属性,类名)
.cs文件可以通过csc.exe程序打开,程序运行时通过JIT编译(Just In Time)即时编译,将程序集编译为cpu能理解的机器码,这时cpu才能执行
面向对象
面向对象编程(OOP→ Object-Oriented Programming)
OOA:面向对象分析Object-Oriented Analysis
OOD:面向对象设计Object-Oriented Design,
OOD OOAD:面向对象分析与设计 Object Orient Analysis Design
面向对象三大特性:封装、继承、多态。我的理解就是这全都是为了增强代码复用和程序可扩展性
类:类是模子,确定对象将会拥有的特征(属性)和行为(方法) 对象是一个你能够看得到、摸得着的具体实体—万物皆对象
类是抽象的,而对象是具体 对象是类的实例
在类中,用数据表示事物的状态,用函数实现事物的行为
属性封装了字段,继承(是指类与类之间的关系。)
所有的类都直接或间接的继承 自object
多态的作用:把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化
关于虚方法需要注意的几点:
1.父类中如果有方法需要让子类重写,则可以将该方法标记为virtual
2.虚方法在父类中必须有实现,哪怕是空实现。
3.虚方法子类可以重写(override),也可以不重写
关于抽象方法注意的几点:
1.需要用abstract关键字标记
2.抽象方法不能有任何方法实现。
3.抽象成员必须包含在抽象类中。
4.由于抽象成员没有任何实现,所以子类必须将抽象成员重写。
5.抽象类不能实例化, 抽象类的作用:抽象类的作用就是为了让子类继承。
6.抽象类中可以包括抽象成员,可以包括有具体代码的成员。
7. 还有抽象方法不能用static修饰
关于接口注意的:
1.接口中只能包含方法(属性、事件、索引器也都是方法)
2.接口中的成员都不能有任何实现。
3.接口不能被实例化。
4.接口中的成员不能有任何访问修饰符。(默认为public)
5.实现接口的子类必须将接口中的所有成员全都实现。
6.子类实现接口的方法时,不需要任何关键字,直接实现即可。
7.接口存在的意义就是为了多态
实现多态的方法有抽象,虚方法,接口
优先考虑接口 然后抽象 最后虚方法
何时使用抽象类、何时使用虚方法?
看这个类将来是否需要实例化,需要实例化则不能abstract;
五个访问修饰符
private 当前类中可以访问,类中成员的默认访问修饰符。
protected 当前类及子类中可以访问(在继承中用。)
internal 当前程序集内部可以访问
protected internal当前程序集或子类中(不同程序集也可以访问)。
public 任何地方
静态类
静态类不能被其他类继承,静态成员亦不能被继承(访问的是同一个)
静态类只能继承自Object类。(静态类不能继承自其它类。)
静态类不能实现任何接口, (因为接口中的成员都是实例成员。)
sealed:()密封类,不能被继承。
sealed关键字,表示类不能被继承。(密封类)
静态类的本质abstract+sealedstatic 静态类不能被实例化:abstract 静态类不能被继承:sealed (String 为什么不能被继承的原因)
值类型 引用类型
值类型均隐式派生自System.ValueType
1、数值类型、bool、结构、枚举
引用类型派生自System.Object
1、字符串、数组、类、接口
引用类型变量的赋值只复制对对象的引用。 值类型变量赋值会拷贝一个副本。
常用类库String
1、字符串不可变性
2、字符串常量池或者说是拘留池
String 常用方法
Length //获得字符串中字符的个数。
IsNullOrEmpty() 静态方法,判断为null或者为”” (静态方法)
ToCharArray() 将string转换为char[]
ToLower() 小写,必须接收返回值。(因为:字符串的不可变);
ToUpper() 大写。
Equals() 比较两个字符串是否相同。 忽略大小写的比较,
StringComparation. IndexOf() 如果没有找到对应的数据,返回-1.
LastIndexOf() 如果没有找到对应的数据,返回-1
Substring() //2个重载,截取字符串。
Split() //分割字符串。
Join() 静态方法
Format () 静态方法
Replace()
常用类库StringBuilder
StringBuilder高效的字符串操作 当大量进行字符串操作的时候,比如,很多次的字符串的拼接操作。 String 对象是不可变的。 每次使用 System. String 类中的一个方法时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。 在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常大。 如果要修改字符串而不创建新的对象,则可以使用 System.Text. StringBuilder 类。 例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。 StringBuilder != String
将StringBuilder转换为String.用ToString();
StringBuilder仅仅是拼接字符串的工具,大多数情况下还需要把StringBuilder转换为String.
StringBuilder sb = new StringBuilder();
sb.Append();//追加字符串
sb.ToString();//把StringBuilder转换为字符串。
关于拆箱装箱:装箱、拆箱必须是: 值类型→引用类型 或 引用类型→值类型
比较(Equals、==)
1、判断是否为同一个对象:判断堆栈中的地址是否一样。
2、==:(查看String)内部调用Equals实现的
3、Equals:object判断对象的地址是否相同,String判断的内容是否相同。
4、String重写了Object中的Equals方法。
5、当两个变量指向同一块内存的时候,我们就说这两个变量是同一个对象。
6、其实就是判断两个变量指向堆中的内存地址是否相同。
7、对于字符串的Equal比较的是字符串的内容,而不是对象的地址。
8、在字符串中==也是比较字符串内容。
9、字符串类中将object父类中继承下来的Equals()方法重写了(又添加了一个方法),因为运算符内部的==(运算符重载)后,内部也是调用Equals来实现的,所以结果一样。
10、在任何情况比较对象是否为同一个对象,使用ReferenceEquals。
11、Object.ReferenceEquals(s1,s2):判断两个对象是否为同同一个对象。
二进制序列化步骤:
1、 创建一个二进制序列化器:
BinaryFormatter bf=new BinaryFormatter();
创建一个文件流
FileStream fs=new FileStream();
2、 开始序列化
bf.Serialize(fs,p1);
注意:1、要进行序列化的对象要标记为[Serializable]([SerializableAttribute]);
2、序列化的类型中的所有字段也必须标记为[Serializale];
3、被序列化的类型的所有父类都必须标记为[Serializale]。
反序列化步骤
1、创建序列化器、创建文件流 (同上)
2、执行反序列化 object obj=bf.Deserialize(fs);
注意:反序列化的时候,需要被序列化类型所在的程序集,因为反序列化的时候要创建一个新的对象,该对象就是原来对象类型,创建好后根据反序列化信息赋值。
委托、事件 (这玩意没怎么理解,需要加强!)
说实话这个学的有点懵
1.定义委托
public delegate void MyDelegate(string s);
先准备一个方法,该方法跟该委托的标签要求一样
public void GetName(string str)
{
Person.name=str;
}
委托对象
MyDelegate _MD;
我的理解就是委托就是变量 不过里面存的就是方法
委托是一种数据类型,通过反编译 可以看到委托被编译成一个CLASS类 所以我们亦可以实例化委托对象
泛型委托
public delegate int Comparsion<T>(T x, T y);
系统内置的泛型委托:
Action<T> (无返回值)
Func<T,TResult> (有返回值)
正则表达式
用举例吧 我主要练习的是用正则表达式匹配网页中的职位信息 还有在网页中扣取图片
WebClient wc = new WebClient(); string name= wc.DownloadString(@"http://localhost:8080/【上海,IT-管理,计算机软件招聘,求职】-前程无忧.htm"); MatchCollection ma= Regex.Matches(name, @" (.+)"); for (int i = 0; i < ma.Count; i++) { if (ma[i].Success) { Console.WriteLine(ma[i].Groups[1].Value); } } Console.WriteLine(ma.Count); Console.ReadKey();
今天放了一天假,本来照以前的我应该睡到中午12点的,但是由于惨痛的教训,让我不能自已,今天屁颠屁颠的跑到教室自习,的确,在教室确实比在寝室学习效率要好!因为自己的种种不足,所以以后就用这点时间慢慢补习,每天进步一小步我就很满足了,时间长了,我相信我会慢慢养成自己的编程思想逻辑的
今天就记这么多吧,我还得多练习练习代码 菜鸟只能勤奋!
---恢复内容结束---
♠关于代码规范
骆驼命名法:第一个单词首字母小写,后面单词首字母大写 userPassword(普通变量,局部变量,字段)
帕斯卡命名法:每个单词都首字母都大写GetName()(方法名,属性,类名)
.cs文件可以通过csc.exe程序打开,程序运行时通过JIT编译(Just In Time)即时编译,将程序集编译为cpu能理解的机器码,这时cpu才能执行
面向对象
面向对象编程(OOP→ Object-Oriented Programming)
OOA:面向对象分析Object-Oriented Analysis
OOD:面向对象设计Object-Oriented Design,
OOD OOAD:面向对象分析与设计 Object Orient Analysis Design
面向对象三大特性:封装、继承、多态。我的理解就是这全都是为了增强代码复用和程序可扩展性
类:类是模子,确定对象将会拥有的特征(属性)和行为(方法) 对象是一个你能够看得到、摸得着的具体实体—万物皆对象
类是抽象的,而对象是具体 对象是类的实例
在类中,用数据表示事物的状态,用函数实现事物的行为
属性封装了字段,继承(是指类与类之间的关系。)
所有的类都直接或间接的继承 自object
多态的作用:把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化
关于虚方法需要注意的几点:
1.父类中如果有方法需要让子类重写,则可以将该方法标记为virtual
2.虚方法在父类中必须有实现,哪怕是空实现。
3.虚方法子类可以重写(override),也可以不重写
关于抽象方法注意的几点:
1.需要用abstract关键字标记
2.抽象方法不能有任何方法实现。
3.抽象成员必须包含在抽象类中。
4.由于抽象成员没有任何实现,所以子类必须将抽象成员重写。
5.抽象类不能实例化, 抽象类的作用:抽象类的作用就是为了让子类继承。
6.抽象类中可以包括抽象成员,可以包括有具体代码的成员。
7. 还有抽象方法不能用static修饰
关于接口注意的:
1.接口中只能包含方法(属性、事件、索引器也都是方法)
2.接口中的成员都不能有任何实现。
3.接口不能被实例化。
4.接口中的成员不能有任何访问修饰符。(默认为public)
5.实现接口的子类必须将接口中的所有成员全都实现。
6.子类实现接口的方法时,不需要任何关键字,直接实现即可。
7.接口存在的意义就是为了多态
实现多态的方法有抽象,虚方法,接口
优先考虑接口 然后抽象 最后虚方法
何时使用抽象类、何时使用虚方法?
看这个类将来是否需要实例化,需要实例化则不能abstract;
五个访问修饰符
private 当前类中可以访问,类中成员的默认访问修饰符。
protected 当前类及子类中可以访问(在继承中用。)
internal 当前程序集内部可以访问
protected internal当前程序集或子类中(不同程序集也可以访问)。
public 任何地方
静态类
静态类不能被其他类继承,静态成员亦不能被继承(访问的是同一个)
静态类只能继承自Object类。(静态类不能继承自其它类。)
静态类不能实现任何接口, (因为接口中的成员都是实例成员。)
sealed:()密封类,不能被继承。
sealed关键字,表示类不能被继承。(密封类)
静态类的本质abstract+sealedstatic 静态类不能被实例化:abstract 静态类不能被继承:sealed (String 为什么不能被继承的原因)
值类型 引用类型
值类型均隐式派生自System.ValueType
1、数值类型、bool、结构、枚举
引用类型派生自System.Object
1、字符串、数组、类、接口
引用类型变量的赋值只复制对对象的引用。 值类型变量赋值会拷贝一个副本。
常用类库String
1、字符串不可变性
2、字符串常量池或者说是拘留池
String 常用方法
Length //获得字符串中字符的个数。
IsNullOrEmpty() 静态方法,判断为null或者为”” (静态方法)
ToCharArray() 将string转换为char[]
ToLower() 小写,必须接收返回值。(因为:字符串的不可变);
ToUpper() 大写。
Equals() 比较两个字符串是否相同。 忽略大小写的比较,
StringComparation. IndexOf() 如果没有找到对应的数据,返回-1.
LastIndexOf() 如果没有找到对应的数据,返回-1
Substring() //2个重载,截取字符串。
Split() //分割字符串。
Join() 静态方法
Format () 静态方法
Replace()
常用类库StringBuilder
StringBuilder高效的字符串操作 当大量进行字符串操作的时候,比如,很多次的字符串的拼接操作。 String 对象是不可变的。 每次使用 System. String 类中的一个方法时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。 在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常大。 如果要修改字符串而不创建新的对象,则可以使用 System.Text. StringBuilder 类。 例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。 StringBuilder != String
将StringBuilder转换为String.用ToString();
StringBuilder仅仅是拼接字符串的工具,大多数情况下还需要把StringBuilder转换为String.
StringBuilder sb = new StringBuilder();
sb.Append();//追加字符串
sb.ToString();//把StringBuilder转换为字符串。
关于拆箱装箱:装箱、拆箱必须是: 值类型→引用类型 或 引用类型→值类型
比较(Equals、==)
1、判断是否为同一个对象:判断堆栈中的地址是否一样。
2、==:(查看String)内部调用Equals实现的
3、Equals:object判断对象的地址是否相同,String判断的内容是否相同。
4、String重写了Object中的Equals方法。
5、当两个变量指向同一块内存的时候,我们就说这两个变量是同一个对象。
6、其实就是判断两个变量指向堆中的内存地址是否相同。
7、对于字符串的Equal比较的是字符串的内容,而不是对象的地址。
8、在字符串中==也是比较字符串内容。
9、字符串类中将object父类中继承下来的Equals()方法重写了(又添加了一个方法),因为运算符内部的==(运算符重载)后,内部也是调用Equals来实现的,所以结果一样。
10、在任何情况比较对象是否为同一个对象,使用ReferenceEquals。
11、Object.ReferenceEquals(s1,s2):判断两个对象是否为同同一个对象。
二进制序列化步骤:
1、 创建一个二进制序列化器:
BinaryFormatter bf=new BinaryFormatter();
创建一个文件流
FileStream fs=new FileStream();
2、 开始序列化
bf.Serialize(fs,p1);
注意:1、要进行序列化的对象要标记为[Serializable]([SerializableAttribute]);
2、序列化的类型中的所有字段也必须标记为[Serializale];
3、被序列化的类型的所有父类都必须标记为[Serializale]。
反序列化步骤
1、创建序列化器、创建文件流 (同上)
2、执行反序列化 object obj=bf.Deserialize(fs);
注意:反序列化的时候,需要被序列化类型所在的程序集,因为反序列化的时候要创建一个新的对象,该对象就是原来对象类型,创建好后根据反序列化信息赋值。
委托、事件 (这玩意没怎么理解,需要加强!)
说实话这个学的有点懵
1.定义委托
public delegate void MyDelegate(string s);
先准备一个方法,该方法跟该委托的标签要求一样
public void GetName(string str)
{
Person.name=str;
}
委托对象
MyDelegate _MD;
我的理解就是委托就是变量 不过里面存的就是方法
委托是一种数据类型,通过反编译 可以看到委托被编译成一个CLASS类 所以我们亦可以实例化委托对象
泛型委托
public delegate int Comparsion<T>(T x, T y);
系统内置的泛型委托:
Action<T> (无返回值)
Func<T,TResult> (有返回值)
正则表达式
用举例吧 我主要练习的是用正则表达式匹配网页中的职位信息 还有在网页中扣取图片
WebClient wc = new WebClient(); string name= wc.DownloadString(@"http://localhost:8080/【上海,IT-管理,计算机软件招聘,求职】-前程无忧.htm"); MatchCollection ma= Regex.Matches(name, @" (.+)"); for (int i = 0; i < ma.Count; i++) { if (ma[i].Success) { Console.WriteLine(ma[i].Groups[1].Value); } } Console.WriteLine(ma.Count); Console.ReadKey();
今天放了一天假,本来照以前的我应该睡到中午12点的,但是由于惨痛的教训,让我不能自已,今天屁颠屁颠的跑到教室自习,的确,在教室确实比在寝室学习效率要好!因为自己的种种不足,所以以后就用这点时间慢慢补习,每天进步一小步我就很满足了,时间长了,我相信我会慢慢养成自己的编程思想逻辑的
抠图片,不过正则表达式我还是有点头疼
WebClient wc = new WebClient(); string name = wc.DownloadString(@"http://localhost:8080/美女们.htm"); MatchCollection mc=Regex.Matches(name, @"hotgirls/([0-9a-zA-Z_]+.jpg)"); for (int i = 0; i < mc.Count; i++) { if (mc[i].Success) { wc.DownloadFile("http://localhost:8080/"+mc[i],@"F:\大图\"+mc[i].Groups[1].Value); } } Console.WriteLine("下载完成"); Console.ReadKey();
今天就记这么多吧,我还得多练习练习代码 菜鸟只能勤奋!