北大青鸟深入.NET全书知识点总结

           第一章
1、定义自己的命名空间
 框架类库中的类是通过命名空间组织的!
 
 问题:
  如果在一个项目中,编写了两个功能不同的但是名字相同的类,就会发生冲突,解决办法有两种:
 (1)将其中一个改名字;
 (2)使用不同的命名空间


 分析:在C#中,如果同一个命名空间下有两个变量和函数的名字完全相同,就会出现冲突!

2、命名空间的使用
 
 (1)、用自定义命名空间组织类
 语法:

 namespace MySchool //mySchool是自己定义的空间名字
 {
  class student
  {

  //类的内容
   public void Study()
   {
   }
  }
 }

 (2)、引用命名空间
 (3)、使用命名空间 
 
 
 ××课后总结:
  本章所学的知识点包括:
   (1) .NET 的基本的框架及其主要内容;
   (2)命名空间的使用及作用;
   (3)根命名空间-- System ;
   (4) ping 来检测网络;
   (5) using 的用法:
    1、引用命名空间;
    2、重命名;
   (6)WebClient下载。
   
         第二章:用对象思考:属性和方法
         
 1)、类是具有相同属性和共同行为的对象的集合;  --类的定义
 2)、类是对象的模板;
 3)、对象是类的实例;
 4)、静态方法中,可以直接调用其他静态方法;
 5)、如果要调用实例方法,则需要通过对象.方法();
 6)、在实例方法中,可以直接调用静态方法;
 7)、共有的变量等命名时用 Pascal 命名法;
  私有的用 Camel 命名法。
 8)、方法:对象执行的操作称为类的方法;
  字段:类中用于操作的变量称为字段(变量分为成员变量、类变量);
  
  字段 表 关联
  属性 表 状态
  方法 标 行为
  
 9)、访问修饰符( public 、 private );
 
   属性的封装保证了数据的合法性;
   
 10)、在类中使用方法:
 
   一、方法的重载:(取决于参数的类型)
    1、在同一个类中;
    2、方法名相同;
    3、参数项不同
      a、参数个数不同;
      b、参数个数相同,对应的参数类型不同。
    

   二、构造函数:
    1、概念:
     (1)构造函数名与类名相同;
     (2)无返回类型。
     
     (3)一般情况,构造函数总是 public 类型的。
     (4)在构造函数中不要对类的示例做初始化以外的事情,不要尝试显示的调用构造函数,
      也就是直接去调用。
      
    2、作用:
     (1)给属性赋值;
     (2)实例化类
     
    3、函数重载:
     1、在同一个类中;
     2、函数名相同;
     3、参数项不同
      a、参数个数不同;
      b、参数个数相同,对应的参数类型不同。
      
 11)、 ref 侧重于   修改
    out 更侧重于  输出
   
 12)、 this 关键字代表的是当前的对象。在类的内部,我们可以用this关键字来访问它的成员。
 
   ★★★课外知识:
     常在电脑前工作,应多吃点胡萝卜,白菜,豆芽,豆腐,红枣,橘子,牛奶及鸡蛋、动物肝脏,瘦肉等食物
      以补充人体内维生素A和蛋白质,抵抗电脑辐射最简单的办法就是:
      最好在每天上午喝2~3杯绿茶,吃一个橘子。
   
 13)、构造函数:
   如果用户没有定义构造函数,则编译器在编译时会自动给该类添加默认的构造函数;
   public Student(){ }
   如果用户已经定义了构造函数,则编译器不会给该类添加默认构造函数。
   
   
         第三章(用对象思考:值类型和引用类型)
 1)、在程序中使用常量
  语法:
   访问修饰符  const  数据类型  常量名 = 值
  何时使用常量:
  (1)用于在程序中一旦设定就不允许被修改的值;
  (2)用于在程序中被经常引用的值。
 2)、枚举:
  枚举表示一组有限的值,对可能的值进行约束,用关键字 enum。
  语法:
   访问修饰符  enum  枚举名
   {
    Male,Female
   }
 3)、给枚举成员赋值
  枚举还允许用描述性的名称表示整数值。
  枚举的主体不可以定义属性和方法。
  
  
  使用枚举的好处:
    (1)易于维护;
    (2)有助于赋值;
    (3)易于输入;
    (4)使代码更清晰,使用直观方便。
   
   
 4)、结构的定义:(结构中的构成和类非常相似)
   语法:
    访问修饰符 struct 结构名
    {
     定义"结构"(可以有字段、方法)成员
    }
   使用:
    在使用时可以不用 new,直接定义就可以了,但是必须为结构的成员赋初值。
   
   结构与类的区别:
    不同点:
      类:
      引用类型,可以被继承,可以有默认构造函数,可以添加无参数的构造函数,创建对象必须使用 new,
      结构中给字段赋初值是错误的。
     
      结构:
      值类型,不能被继承,不可以有默认构造函数,可以添加构造函数,但是它们必须带有参数,
      创建对象可以不用 new,类中可以给字段赋值。
    相同点:
      都可以包含字段、方法,都可以实现接口。
   
  5)、值类型:(包括)
    数据类型
    结构类型
    枚举类型 
  6)、引用类型(C# 中包括 类类型和接口类型)
    引用类型变量的赋值只复制对象的引用,而不复制对象本身。
    
  7)、装箱:
    值类型转换成引用类型称为  装箱。
  8)、拆箱:
    引用类型转换成值类型成为  拆箱。
  
  9)、类型的参数传递 
                 实参
                 
          @1、值传递     不变
   (1)、值传递(无 ref ){
          @2、引用类型    变
          
          
          @1、值类型     变
   (2)、引用传递(有 ref ){ 
          @2、引用类型    变
    
  10)、数据类型分类(在课本72页)
  11)、索引器:
    语法:
     访问修饰符  名称  this  [数据类型  名称]。
    特点:
     索引器和数组属性有些类似,但是数组属性只能通过下标(索引)访问,而索引器可以
     通过重载它,从而自定义它的访问方式。
  12)、使用类图描述类和类成员
    在类图中:
     +  表示  共有
     -  表示  私有
     
     
     
     
     
     
     
     
     
          第五章
         文件读写与XML
1)、1、文件
  (1)如何读写文件(分 5 个步骤)
   1)创建一个文件流
   2)创建阅读器或者写入器
   3)执行读写操作
   4)关闭阅读器或者写入器
   5)关闭文件流
   
  命名空间为:using System.IO;
   例:
  创建文件流
  FileStream myFs=new FileStream(path,FileMode.Create);
  创建写入器
  StreamWriter mySw= new StreamWriter(myFs);
  将录入的内容写入文件
  mySw.Write(content);
  关闭写入器
  mySw.Close();
  关闭文件流
  myFs.Close();
  
  (2)文件流
   1)流是一个用于数据传输的对象
    在创建一个文件流时需要在它的构造函数中指定参数。
   
   Create:用指定的名称新建一个文件
   CreateNew:新建一个文件
   Open:打开一个文件,使用这个枚举值时,指定的文件必须存在,否则会发生异常。
   OpenOrCreate:OpenOrCreate与Open成员类似,只是如果文件不存在,则用指定的名称新建一个文件并打开它。
   FileMode:枚举还有其他的成员
  (3)文件读写器
   1)StreamWriter写入器
   2)StreamReader
    问:不用文件流操作简单,为什么还要使用文件流操作?
    答:非文件流方式对文件进行操作,无法对文件的打开方式、访问方式进行精确的控制,不容易控制读写。
    有时候容易引发异常。但是对于一些简单的文件操作而言,这种方式非常方便。
  (4) File 类的方法:
   Exists(string path)  用于检查指定文件是否存在,返回值为布尔值
   Copy(string SourceFileName,string DestinationFilePath)  复制到目标文件夹
   Move(string sourceFileName,string destFileName)  移动
   Delete(string path)  删除
  (5) Directory 类的方法:
   Exists(string path)  用于检查指定文件夹在磁盘上是否存在
   Move(string sourceDirName,string destDirName)  移动
   Delete(string,bool)   删除,如果bool值为true,则删除子目录中所有目录内容
2)、XML(可扩展标记性语言)
  1)特点:
   一、XML中用于描述数据的各个节点可以自由的扩展;
   二、XML文件中的节点区分大小写;
   三、XML中的每对标记通常称为节点,它们是成对出现的,用来描述这个节点存储的内容。
  2)TreeView树形控件
   TreeView也是通过节点来表示数据的,它的 Nodes对象表示它的节点集合,TreeView的节点对象是TreeNode。
  
          
          
          第六章
         用对象思考:继承
1)、继承的概述:

  1)概念:
   继承是面向对象编程中一个非常重要的特性。在有继承关系的两个类中,子类不仅具有自己独有的成员,
   还有父类的成员。
   (1)被继承的类称为父类或者基类,继承其他类的类称为子类或者派生类。
   (2)继承关系在类图中表示为一个箭头,箭头指向的是父类。
   (3)继承要符合 is-a 的关系。
  2) protected 访问修饰符与 base 关键字
      public , private , protected 的区别:
   修饰符   类内部    子类    其他类
   
   public   可以    可以    可以
   private   可以    不可以    不可以
   protected  可以    可以    不可以
   
  ◆◆◆
  问:如果父类的字段设为 protected,我们在子类中访问字段和属性有什么区别呢?
  答:请回顾属性的特点,属性可以对类本身的字段进行约束。为了保证数据的安全还是建议你使用属性。
  3)在子类中可以直接用 base 关键字调用父类的属性和方法,还可以调用构造函数。
2)、继承的使用:
  1)继承的特性:
   【1】传递性:
    如:A:B,B:C,那么 A:C。
   【2】单根性
    就是说所有的子类的基类只能有一个。
   【3】密封性:
    用 sealed 修饰的类不能被继承,我们称这种类为 密封类。
  2)编写子类时的注意事项(两点)
   【1】隐式调用父类构造函数
   【2】显示调用父类的构造函数
   如果父类中没有提供默认的无参构造函数,那么子类的构造函数必须明确指明调用的是哪个父类的有参
   构造函数。
   在实例化子类的时候,先执行父类的构造函数,在执行子类的构造函数,
   :base() 调用父类的构造函数。
   用 base.属性、 base.方法。
3)、继承的价值:
  1)继承模拟了现实世界的关系;
  2)继承实现了代码的重用;
  3)继承使得程序结构清晰。
   
   
   
          第七章
         用对象思考:多态
1)、多态:(好处-----不用考虑类型问题)
  1)概念:
   不同的对象对于同一个方法却有着不同的执行结果,我们称之为多态。
   多态也可以说是同一个类在不同场合下表现出不同的行为特征。
  2)定义:
   发生在子类与父类之间:
   【1】方法名相同
   【2】参数项相同
  3)对方法的使用:包括--
   方法的重载:
   
   方法的重写:(包括重写父类的抽象方法和重写父类的虚方法)
2)、抽象方法和抽象类:
 1)定义:
  抽象方法是一个没有实现的方法,通过在定义方法时增加关键字 abstract 可以声明抽象方法。
 2)抽象方法:(特性)
  【1】不包括方法体
  【2】含有抽象方法的类一定是抽象方法
 3)抽象类:
  【1】抽象类不能被实例化(所以只能通过它的子类来实现该类的方法,除非它的子类也是抽象类。)
   轻松理解:如果抽象类不被子类继承并实现它的抽象方法,那便没有实际意义了。
  【2】抽象类不能是密封或者静态的。
 4)抽象类中是否都是抽象方法?
  【1】抽象类中并不都是抽象方法,也存在具体的方法。
  【2】含有抽象方法的类必然是抽象方法。
 5)抽象类和抽象方法的使用:
  【1】重写抽象方法:
  语法:
  访问修饰符 override 返回类型 方法()
 6)里氏替换原则:
  【 is 操作符的使用】:
   "is" 操作符是用来检查对象是否与给定的类型相同。
   if(obj is string)
   {
   }
  【 as 操作符的使用】:
   "as"用于两个对象之间的转换,
   as 类似于强制转换,不同的是
   强制转换转换失败时会报异常;
   而 as 在转换失败时,运算符将产生空(null),不会报出异常。
3)、使用虚方法:
 1)使用虚方法实现多态
  虚方法用 virtual 关键字修饰,可以有方法体。
  
  语法:
  访问修饰符 virtual 返回类型 方法()
  {
   //方法体
  }
 2)重写 Equals() 方法-----是虚方法,可重写
  语法:
  public virtual bool Equals(Object obj)
  
 3)虚方法的好处:(何时用虚方法?)
  可以提供默认的实现,还可以重写自定义的实现方式,大大的增加了程序的灵活性。
  
  如果你想让你的代码更加人性化,灵活就尽量使用虚方法来实现功能。
  
 4)虚方法与抽象方法的区别:
 
       虚方法      抽象方法
     用 virtual 修饰     用 abstract 修饰
     要有方法体,哪怕一个分号  不允许有方法体
     (可以)被子类重写 override   (必须)被子类重写 override
     除了密封类外都可以写   只能在抽象类中
4)、面向对象的三大特性:
 【1】封装
 【2】继承
 【3】多态
5)、简单工厂模式:
 ◆软件中的设计模式是软件开发中对于某种需求的一种经验的总结,是特定问题经过实践的特定解决方法。
 ◆设计模式可以提高软件的复用性,使软件更易于扩展,更容易适应需求的变化,设计模式是面向对象
  在实际应用中的集中体现。
 ◆简单工厂模式用于在调用者不知道对象属于哪个子类的情况下,创建不同的对象。
 
 
          第八章
         用对象思考:接口
1)、接口:
  1)概念:
   接口是一组规范,是一种标准,遵循这个规范和标准就能实现某种功能。
   
   接口也是一种类。
   接口中不能有方法(可以有抽象方法)
      不能有字段(可以定义,但是不能赋值)
      成员不需要 public 修饰
      重写方法不需要 override 关键字
      不能有构造函数
      不能实例化
   接口可以实现继承。
   
  2)作用:
   【1】实现多重继承
   【2】定义了一种规范和标准
  3)定义:
   语法:
    public interface IComparable
    {
     int Comparer( Object obj);
    }
   定义一个接口的名称通常都是以“I”开头,例如:IComparable、IList。
   实现了一个接口、继承一个类。
   实现一个接口的语法与继承类似 :class Student: IComparable 。
   如果类已经继承了一个父类,则以“,”分隔父类和接口。
   class Student : Person,IComparable
  4)接口小结:
   【1】接口是对继承单根性的扩展;
   【2】接口是一种规范和标准;
   【3】接口屏蔽了实现的细节;
   【4】接口的使用方便团队协作开发。
  
2)、泛型接口:
  1)概念:
   在比较大小时不需要类型转换,对类型控制更严格,增强系统安全性,代码也非常简洁。
  2)泛型接口:
   IComparable<T>是IComparable接口的泛型版,他对类型的约束更加严格。
  3)比较器:
   IComparer<T>通常称为比较器,它用于比较两个对象的大小,可以作为参数传递给 Sort() 方法进行排序。
  4)例子:
  //比较器    排序
  class NameCompar:IComparer<FeedBase>
  {
   //按姓名升序
   public int Compar(FeedBase x,FeedBase y)
   {
    return x.DisplayName.CompareTo(y.DisplayName);
   }
  }
  //点击次数比较器
  class ClicksCompar:IComparer<FeedBase>
  {
   public int Compar(FeedBase x,FeedBase y)
   {
    //升序
    return x.Click.CompareTo(y.Click);
    //降序
    return y.Click.CompareTo(x.Click);
   }
  }

3)、接口的典型应用:
  1)接口作为参数的意义:
   接口作为参数就是传递一个实现了接口的对象。
  2)接口作为返回值的意义:
   接口作为参数传递了实现接口的对象。
   接口作为返回值实际上就是返回一个实现接口的对象。
  3)实现一个接口必须实现它提供的方法、属性等。
   【1】接口:接口是某类行为或功能的抽象,是一种规范或者标准,或者说是一种契约。
   【2】抽象类:对具体对象的最高抽象,这个对象拥有自己的最基本特征;
    从整体上来讲,抽象类和接口本质上都是系统的最高抽象,从实际上来讲,二者抽象的对象不一样
    就这一点导致了他们二者的应用截然不同。
    本质相同,但是对象不一样。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值