首页 > 代码库 > 基础笔记一

基础笔记一

♠关于代码规范

骆驼命名法:第一个单词首字母小写,后面单词首字母大写 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, @"<a\shref=""http://search.51job.com/job/\d{8},c.html""\s.+>(.+)</a>");        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();
View Code

今天放了一天假,本来照以前的我应该睡到中午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, @"<a\shref=""http://search.51job.com/job/\d{8},c.html""\s.+>(.+)</a>");        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();
View Code

今天放了一天假,本来照以前的我应该睡到中午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();
View Code

 

 今天就记这么多吧,我还得多练习练习代码   菜鸟只能勤奋!

 

基础笔记一