zoukankan      html  css  js  c++  java
  • S2总结笔记

    第一章:深入.NET框架

    1..NET FrameWork两大组件是什么?

     解析:.NET 框架类库(FCLFrameWork Class Library)和公共语言运行时(CLR:common language Runtime)

    2.CLR包含两部分:

    解析:公共语言规范CLS(Common Language Specific) 通用类型系统CTS(Common  Type System)

    3.c#语言要编程成可以被CPU解析执行的代码需要两次编译:

    第一次编译:将C#语言通过c#编译器编译成MSIL中间代码

    第二次编译:将MSIL代码通过即时编译器(JIT)编译成CPU可以解析执行的代码,或者成为(平台专用代码)

    4.java程序要想被CPU解析执行也是需要两次编译

    一次编译:将后缀名为java的文件通过java编译器编译成后缀名为.class(字节码)文件

    第二次编译:将.class文件通过java虚拟机(jvm)编译成CPU可以解析的代码

    5.CLR里面至少三部分:

    CTS

    CLS

    JIT

     

    类库:可以看成是一个承载了N个类的容器。

    类库:System.Data.SqlClient    和数据库交互

          System.Data:            DataSet

          System.WinForms;        Winform应用必须类库

          System.Collections.Generic;   泛型集合

          System.Net;                网络操作,下载等操作

           System.IO;               文件的读写,文件夹的读写。遍历等操作

           System.Drawing;           绘制图形,和验证码

    类库和命名空间?

    解析:一个类库一般对应一个命名空间,也可以对应多个。

    6.字段和属性区别?

    解析:01.属性不能保存数据,真正保存数据的是字段

         02.属性是可有可无的,字段是必须的。

     03.如果字段只想让类内部访问,那么设置成private,如果想找一个中间者,

      在Main方法中访问到Student类中的私有字段,那么属性可以是一种选择。

    希望:推荐大家以后书写类的时候,字段和属性成对出现。

    .属性无非就是有getset两个访问器组成

    第二章:深入C#数据类型

    1.值类型和引用类型

    值类型:int double string bool 枚举 浮点型

    引用类型:System.Object string 自定义类 接口 数组

    值类型(在栈上存储真实的值)和引用类型(堆和栈上都要分配空间)

    2.关于数组的那些事儿

    如果我们定义一个数组,并且赋值了

    int[] nums={1,2};

    nums当中保存 的是堆中的地址:例如:0x001

    nums[0]:访问的是堆中的内容

    3.封装的优点

    第一:重用

    第二:不必关心具体的实现; (方法)

    第三:面向对象三大特征之一

    第四,具有安全性!

    4.结构体

    1.结构体不用new,就可以直接对其属性赋值

    2.结构体中可以有字段,属性和方法

    3.结构体是值类型,类是引用类型

    4.在结构体中不能给字段赋初值,但是类中可以

    5.结构体中没有默认构造函数,但类中有默认构造函数

    所有数据类型的父亲都是Object

    所有的值类型直接的父亲是ValueType,爷爷是Object

    5.构造函数

        默认如果定义了一个类,系统会自动的生成一个和该类名称相同,并且没有返回值类型

    甚至连Void都没有的方法,该方法就称为构造函数

    Student stu=new Student();

    注意问题:值类型的直接父类都是ValueType,而ValueType又继承自Object

    特殊的值类型:枚举和结构体

    特殊的引用类型:数组和接口

    6.拆箱和装箱

    拆箱:

    装箱:

    7.值类型传递和引用类型传递

    方法的参数是值类型和引用类型

     

    注意:值传递和引用传递判定依据是有没有ref关键字

    结论:

    1.如果方法的参数类型本身就是引用类型,那么对参数值的修改会永久保存

    例如:public void TP(SE se)

    {

        se.Count++;//真正的修改se对象的Count

    }

    02.如果方法的参数类型本身是值类型,又没有ref修饰,那么对参数值的修改,不会永久保存()

    03.如果方法的参数类型本身是值类型,但是有ref修饰,那么对象参数值的修改,也会永久保存。

    值类型传递 :不带ref的参数传递   SE se

    引用类型传递:带ref的参数传递 

    第三章 使用集合组织相关数据

    一、集合概念引入

    集合:某些指定的对象(SE)集中在一起就是集合

    数组:可以存储相同数据类型的一堆数据的容器

    二、第一个集合ArrayList的使用

    1.引子:

    ArrayList进行赋值的时候,需要使用Add()

    但是对集合中元素的修正可以使用下标,eg.list[0]=1给新值

    但是在集合中元素个数为0的情况下,不能用Add()方法之外的其他手段给集合中添加元素

    ,原因因为_size是集合的一个属性, 真正存储元素个数为0的时候。_Size也是0.

    int[] nums = { 1, 2, 3, 3, 4, 5 };

        我想在23之间插入一个元素100

        数组的局限性:由于给数组中添加元素,删除元素的时候,特别麻烦,所以我想找一个替代数组的工具,来帮我们实现数组所能实现的功能。集合应运而生

        集合的优点:01.自动扩容 02.集合当中很多方法可以让我们更加便捷的来操作集合中数据。(必须掌握)

    扩展:集合本质的讲解▲

     00.使用ArrayList首先需要引入命名空间

     01集合动态扩容原理:如果集合中元素个数为0,并没有开辟空间

     02.默认如果集合中出现了第一个元素,那么集合的大小4,如果放入第5个元素,那么会扩容成8

     03.如果在小括号中首次定义的时候指定了集合的长度,那么以后扩容的方式

     变成初次指定数字大小的2倍;如果没有指定长度,那么遵循01的规范

    三、集合中元素操作(添加,遍历,删除、常见错误)

    1.常见属性:

    Capacity:集合占用空间

    Count:集合存储元素个数

    2.常用方法:

    添加:int Add(Object value) //添加一个对象到集合的末尾

    遍历:通过foreach遍历

    删除:Remove()RemoveAt()Clear()

          *:注意事项:如果删除了集合中的某一个元素,那么集合的索引会自动维护

          Remove():删除内容

          RemoveAt():通过索引删除

          Clear():一次性移除集合中所有的元素

          Contains():是否包含某个元素

    3.ArrayList

         删除方法,包含,

       02.命名空间

         同名类便于区分,加快检索硬盘上某个类的速度

         Using System.Collections

         Using System.Collections.Generic; //泛型命名,默认导入

       03.var :隐式类型推断

          最后一个问题:

         int num=5;

       04.HashTable  

         第一个:删除

            没有RemoveAt()

         第二个:

           三个方案:根据key拿到value  

       只能拿到value

                    DictionayEntry     

                 Foreach( DictionayEntry item in table)

                 {

                     item.Value

                     //命名空间.类名

                 }      

         第三个:HashTable是一种无序的双列集合。

         第四个:ContainsKey()

    01.集合对于数组优点:

      001.操作方便(新增,删除,查找方便)

      002.自动扩容(刚开始可以不指定集合初始容量)

    02.集合的实现原理

      解析:集合在设计上还是使用数组实现的,只不过微软对两个相互copy的数组的执行效率进行了优化,所谓的自动扩容,无非是将新数组长度定义成旧数组长度的两倍后,再将新数组的前N项用旧数组的所有项填充而已。

    4.集合初始化器,对象初始化器

       ArrayList engineers = new ArrayList() 

            new SE(){Name = "周星星",Age = 26,

                         Gender = Gender.male,ID = "000",Popularity = 10},

            new SE(){Name = "王贱贱",Age = 22,

                         Gender = Gender.female,ID = "111",Popularity = 20},

            new SE(){Name = "周姐姐",Age = 30,

                         Gender = Gender.male,ID = "222",Popularity = 20}

    };

    5.HashTable

      Hashtable 通常称为哈希表

      根据键(Key)可以查找到相应的值 (Value

      

     1.HashTable注意事项

      

          01.HashTable类型的集合只能用foreach循环遍历,因为没有索引

          02.HashTable集合中元素是无序的(不会按照Add的顺序来展示元素内容)

          03.HashTable中的key不能重复

          04HashTabel没有RemoveAt()

     2.HashTable遍历三种方案:

         1.:第一种方式,遍历所有的keys,通过key的值获取value

         2.:第二种方式:遍历所有的value集合

         3.:第三种方式,同时遍历keyvalue

           Eg:

        foreach (DictionaryEntry item in table)

                {

                    Console.WriteLine(item.Key + "value==" + item.Value);

               

    6.泛型集合List<T>(理解difficult,写起来easy

     泛型:就是为了约束ArrayList中元素类型,而制定的一个新的集合类型,该类型只能加入同一类型的多个元素,标识符<T>,可以看成是一个占位符,泛型是将运行时错误提前到了编译时

    7.泛型集合Dictionary<K,V>

     Dictionary<string,Person> dic=new Dictionary<string, Person>();

    8..NET集合框架(集合扩展)

    Queue(队列):

    Queue与Stack类似,主要区别是Queue类以先进先出(FIFO)的结构创建集合,即,元素进入集合的顺序与弹出顺序相同

    队列图:

    一、void Enqueue(object obj):将元素加入队列

    二、object Dequeue():将队首元素从队列中删除

    三、bool Contains(object obj):判断是否包含某元素

    Stack(栈):

    StackSystem.Collections.Stack类表示对象的简单的后进先出非泛型集合。

    栈图:

    常用方法:

    泛型方法

    //方法定义

    static void Swap<T>(ref T lhs, ref T rhs){    T temp;    temp = lhs;    lhs = rhs;    rhs = temp;}

    //方法调用

    public static void TestSwap(){    int a = 1;    int b = 2;     Swap<int>(ref a, ref b);    System.Console.WriteLine(a + " " + b);}

    第四章 深入类的方法.构造函数

       构造:方法名和类名相同,没有返回值

     

       无参构造函数

     

       带参构造函数

     

    构造的生成:

     

       注意:在C#中,当我们定义了一个类后,默认会生成一个与类名

     

       同名的无参构造,但是如果我们自定义了任何一个带参构造,那么  

     

       系统不再帮助我们生成无参构造,在真实的开发中,推荐大家定义

     

       两个构造函数,一个无参,一个带参。

    2.方法重载

    解析:在同一个类中,如果多个方法方法名称相同,但是参数列表(个数,顺序,类型)不同)的多个方法可以构成重载,和方法的返回值类型没有半毛钱关系

    以下的两个方法可以构成方法重载

          public void Say(string name,int age)
            {
               
            }
            
            public void Say(int age,string name)
            {
               
            }

    第六章 继承

    使用new实例化对象调用了构造函数

    方法重载的特点:

    在同一个类中,方法名相同该,参数里列表不同,和返回值类型无关

     

     

    1.继承:在C#中,如果一个类后面通过冒号又跟了另外一个类,那么我们就称冒号前面的类

    为子类,冒号后面的类为父类。这种书写类的方式放映出来的关系就称为类的继承关系。

    子类:派生类

    父类:基类或者超类

    2.如果new一个子类对象,那么有如下执行流程

       01.先定位到子类对应构造函数,没有执行子类的方法体

       02.转向了父类的无参构造函数,执行父类构造方法体

       03.转向了子类的方法体继续执行。

    3.通过base调用父类构造函数注意点

    解析:01.通过base调用父类构造函数只能书写在子类的构造后

         02.通过base调用父类构造函数参数顺序和父类的构造参数一致

    4.访问修饰符

      public:在任何位置都可以访问,甚至是跨程序集都可以访问。

      private:只能当前类的花括号中访问。

      protected:只能在当前类,当前类的子类,子类的子类(孙子类)中可以访问。

    5.继承的传递性

    如果一个类B继承自类A,而类C又继承类B,那么类C也可以访问到类A中非私有成员

    6.new子类底层原理

    1.走到子类构造,不进入构造体.

    2.转向父类,进入父类构造执行.

    3.转向子类构造,执行子类的构造体

    4.转到Main内存构建对象.

    5.遍历窗体上所有的控件,判断是不是文本框

    foreach(Control c in this.Controls)

    {

        if(c is TextBox)

    {

      ((TextBox)c).Text="";

    }

    }

    6.继承的价值

    01.模拟现实世界的关系

    02.便于重用和扩展已彻底测试的代码,且无需修改

    03.结构更清晰

    14.实现多态三种方式:

    方式一:通过虚方法实现多态

    实现多态的步骤

       01.在父类中通过virtual关键字定义一个虚方法

       02.在子类中通过override关键字对父类中的虚方法进行重写

       03.调用的时候,调用的是子类的方法

      目前为止,我们学了两种: 

       第一种:虚方法实现多态

    通过在普通类Person中用Virtual关键字定义虚方法SayHello(),然后在子类Student中通过override关键字对父类的SayHello()方法进行重写。

    如下:

     

    Studnt

    Teacher

    Main方法中调用

    第七章 深入理解多态

    1.里氏替换原则:在一个软件系统中,如果子类出现在父类出现的位置,而整个软件功能又没有影响,那么咱们称为里氏替换。

     

    考试题:父类变量指向子类对象!!

     

    2.里氏替换  是     设计原则的一种

     

     七种设计原则   ,写成blogs

     

    3.Is as  

     

    Is 做类型判定,  要想进行父类对象    到子类  类型的转换,还得用 as

     

    4.模拟员工回家-------->父类作为方法参数

     

    Employee

     

       --->GoHome(Traffic traffic)

     

    Traffic  ---父类

     

       --->Bicycle  (自行车)  

     

       --->Car

     

       --->Tube 

     

    Program

     

      --->Main

     

    5.大话设计模式

     

         简单工厂 

     

         单例

     

         23种设计模式

     

    两种方式实现多态:

     

      普通类+  虚方法

     

     抽象类+抽象方法

     

    市面上所有教程 都会明确指出一个观点 :抽象类不能实例化 。

      一.实现面向对象的多态性有哪几种方法?

       总共有3种,第一种,虚方法实现多态,  第二种:抽象方法实现多态  第三种:接口实现多态

       目前为止,我们学了两种: 

     

    潜台词:不能直接使用如下代码实例化

     

         Animal  animal=new Animal();//编译器报错

     

    间接的通过子类构造,隐式   调用  父类构造的形态  来变相的在内存中 产生一个你肉眼不可见的对象。但是不幸的是  ,作为程序员的我们,无法拿到抽象类对象的引用(也就是栈上的变量名)。 第一种:虚方法实现多态

    通过在普通类Person中用Virtual关键字定义虚方法SayHello(),然后在子类Student中通过override关键字对父类的SayHello()方法进行重写。

    如下:

    Student

    Teacher

    Main方法中调用

      第二种:抽象方法实现多态

    通过在抽象类Birds中定义抽象方法Fly(),然后在子类【燕子】中对抽象方法Fly()进行重写实现多态,重写方式和虚方法一样,也是使用override关键字

    Birds:

    燕子类:

    喜鹊类:

    Main中调用:

    课堂笔记:

        //01.定义一个抽象类,abstract 修饰

        //02.抽象方法不能有方法体,甚至连{}都不能有

        //03.抽象方法只能存在于抽象类中,但是抽象类中可以有非抽象方法

        //04.抽象类不能实例化

        //05.抽象类中抽象方法只是用来规定方法的形式(参数,返回值),约束子类方法的形式

        //06.抽象类中的抽象成员必须在子类中全部实现,除非子类也是抽象类

        //07.子类实现抽象方法的快捷键,Ctrl+.(没有输入法情况下 )

        //shift+alt+F10

    //08.抽象类不能用static修饰,也不能是密封类(sealed):如果是static,抽象就无法被继承,也就失去了抽象类

      02.方法重载和方法重写的区别?

      override:在不同的类中,一个方法用override关键字修饰,那么就对父类当中的同名方法进行了重写

      重写的目的:就是为了实现多态,更进一步来说,就是为了统一调用

      方法重载:overload:在同一个类中,多个方法名称相同,参数列表不同就可以构成重载,和返回值类型

      没有半毛钱关系

     

    第八章:可拓展标记语言XML

    解析Xml文件

    1 XmlDocument myXml=new XmlDocument();
    2 myXml.Load("Engineer.xml");//读取指定的XML文档
    3 XnlNode engineer=myXml.DocumentElement;//读取XML的根节点
    4 foreach(XmlNode node in engineer.ChildNodes);//对子节点进行循环
    5 {
    6 //将每个节点的内容显示出来
    7 switch(node.Name)
    8 }
  • 相关阅读:
    暑假每周学习进度-7
    暑假每周学习进度-6
    寒假生活05
    寒假生活04
    寒假生活03
    寒假生活02
    寒假生活01
    软件设计师2019模拟小测
    第二周学习记录
    2019秋季学习计划
  • 原文地址:https://www.cnblogs.com/wdas-87895/p/5905466.html
Copyright © 2011-2022 走看看