C#

    1. 第一章 C# 基础
    2. C# 代码组成部分
      1. 引用库 using sys.
      2. 命名空间 namaspace
      3. 函数 index.cs pogram.cs Main 程序入口
    3. 数据类型和数据类型转换
      1. 分类: 引用类型和值类型,引用类型数据存放在堆上,值类型存放在栈上
      2. 引用类型字节大小不固定: string, object,
      3. 引用类型在栈上存放的是堆的地址
      4. 值类型引用类型图片解析
      5. 类和类的实例内存分布。
      6. 值类型大小固定: 
        • short int 2字节, int 4字节,long int 8字节
        • char 字符类型  2字节
        • float f=123.12f 浮点 4 字节
        • double 双精度浮点 8 字节
        • decimal 金融数据 8字节
        • struct 声明时候固定大小
        • 枚举类型 enum
        • bool 1 字节
      7. 引用类型 string object, Int32.Paerse(). ToString()
      8. int float string 相互转换
      9. 数组[]:int[30],string[5],
        • 数组长度, 数组访问遍历
        • Student[10] 学生数组构成班级
      10. 二维数组[i][j] :数组的成员是数组。班级数组构成年级。
      11. 三维数组p[i][j][k],年级数组构成学校。
    4. 代码执行和流程控制
      1. if(){} else if{} else{} : 条件判断
      2. while(条件){}do{}
      3. return 跳出整个程序集
      4. break 跳出本次循环
      5. for(条件){}
      6. swich case, 条件执行, 和枚举, 枚举做case条件
      7. 流程控制和输入字符 数字字母统计:Ctrl+Z(-1)
      8. a-z:97-122(asic码值)
      9. A-Z: 65-90(asic码值)
      10. 0--9:48-57(asic码值)
      11. int --(char)(): asic 码值转换成字母
    1. 类和类的成员, 类的集合
      1. 类的修饰:
        • 访问级别修饰
        1. public :公共类, 可以被类继, 可以new出来
        2. private: 私有,class 内部访问, class 默认的访问级别。并不能继承
        3. protected: 受保护类,calss 内部和继承类可以访问
        4. internal: 只能在当前程序集, 别的程序集不能访问, 类的方法成员的默认访问级别
        5. partial: 局部类型, 局部类型允许我们将一个class、struct或interface分成几个部分,分别实现在几个不同的.cs文件中。
        6. sealed :密封类,不能被继承
        7. abstract: 抽象类
      1. 类的成员:
        1. 字段(类有什么):小写; public string/int/float XX;用构造函数或者属性暴露字段。
        2. 属性(赋值)大写,属性可以将字段暴露。本质是两个方法 set{} get{}, 属性是字段的扩展,用来对字段进行灵活的访问。
        3. 方法/函数(做什么):大写,方法可以将字段暴露。由方法的签名和代码块{}组成,方法签名包括:访问级别(public/private/),修饰关键字(static/abstract/void、virtual),方法名称(+参数)
        4. 构造函数:与class 类同名且没有返回值的方法,实例化(new)一个class 时候会调用,用于创建类的事例对象,当调用构造函数实例化一个对象时, 构造函数会为对象分配空间,并初始化类的成员。(事例构造函数和静态构造函数,静态构造函数兼有静态成员和构造函数的特点)
        5. 静态构造函数:
          • 不能有访问级别修饰 public.private.
          • 不能有参数
          • static 关键字修饰
          • 不能实例化实例变量   
          • 调用时机,类被实例化或者静态成员被调用时。所以只执行一次
          • 一个类只能有一个静态构造函数                                   
        1. static 修饰的class成员: 静态成员:直接与类相关连,类创立的时候就有。 而不是和new、实例化的出来的(对象,变量)相关联,所以不new类也能直接类点操作符也可以直接访问。
        2. 没有 static 修饰的 成员是实例实例成员, 需要new出来class 变量、对象才能使用该实例成员。
      1. 函数重载, 函数重写override
        • class 的两个或者多个同函数名不同参数列表(参数个数,参数类型, 参数顺序)的函数形成重载,横向的平等级别之间的关系
        • override 重写: 基类由virtual 修饰的虚方法,子类在继承基类的时候可以用override 修饰,来重写基类方法。纵向关系, 父类和子类的关系。
        • 基类身份声明的变量可以用子类对象赋值,先在自已身上扫描,如果有,并且是用virtual关键字修饰的,就转而向下扫描子类,如果子类中有同名的并且用override关键字修饰的方法就调用子类的方法,如果子类中没有这个方法或是子类有这个方法,但没有用override修饰就返回来调用基类身上的方法
        • override重写:基类由 abstract修饰的成员由 abstract 修饰的抽象类抽象方法没有方法体,继承类必须重写,继承类必须有overide修饰。
        • Interface接口成员的重写: 横向的多态。
  • 第二章 Winform
    1. 控件
      1. 新建 visual->新建项目->wondows 窗体-> windows窗体应用程序
      2. 控件:listBox,checkBox,combineBox, button, text, datagrideView.LIistView,pannel,menu, 工具条,数据绑定, 重新命名属性.
      3. 控件属性.
    2. 面向对象和面向对象特征
      1. 设计思想,c语言是面向流程的开发语言, c# s是面向对象的开发语言
      2. 面向流程和面向对象并不是完全无关, 在面向对象设计中也有流程的思想
      3. 面向对象的特性:
        1. 封装: int可以代表天下的全部int 类型数据、把学生做成一个student类,有效的对外隐藏class 的内部数据,从而避免数据损坏(篡改..删除...;)
        2. 继承:子类可以继承基类pubic和protected成员,(private成员只在class 的内部能访问,sealed class 密封类不可以被继承), 子类初始化顺序, 字段-->基类(没指明基类则调用最终类 object), 纵向的继承关系。
        3. 多态:子类继承父类可以覆写基类的方法, 实现子类特有的行为。Cat<--Animal-->Dog, cat 和dog有不同叫声, 横向的比较关系。普通类继承基类形成的多态, 抽象类抽象方法的实现的多多态。实现接口成员的类的多态-- 横向的。
      4. 抽象基类(abstract 修饰的class)多态
        1. abstract 抽象类天生被继承, 不能new直接呢我抽象类(实例化,具体实现)。
        2. 抽象类的声明的变量 a 必须用子类赋值 Animal a = new Dog().
        3. abstract class 内部可以有实抽象成员(abstract 修饰的),纯虚成员,只能有声明,没有具体的实现,没有方法体。所以要在继承类中去具体实现, 必须在继承类override 重写。
        4. abstract class 内部可以有实例成员(非abstract 修饰的成员), 可以有方法体,可以通过子类访问。
        5. 多个不同的子类对抽象基类 abstract class  abstract 的抽象成员的重写, 形成横向的多态
      5. 接口 Interface (class 或者食物的标准), 抽象类 abstract
        1. Interface 接口也是一种类。
        2. 纯抽象类不能有任何实例成员。
        3. 和抽象类的声明的变量 a 必须用子类赋值 Animal a = new Dog().同理。 接口声明的变量必须用实现了该接口的类赋值。
        4. 接口的成员是方法的声明,接口成员没有方法体, 没有具体实现。必须要在继承类实现接口的全部成员。
        5. 接口成员默认 public, 所以不用再显示的加 public 关键字修饰 .
        6. 对于实现了两个接口的类, 若两个接口有同名的成员, 要
        7. 在实现类显示的加上对应接口做前缀。
        8. 继承接口的两个或者多个类, 都对接口成员方法重写, 形成横向的多态接口实现 的多态。
      6. 继续。。。。
    3. 三层架构 经典: 通常意义上的 三层架构是: UI 界面层,BLL业务逻辑层,DAL数据房访问层
      1. 新建类库 三层架构 ->
      2. Model 模型层,DAL database access layout,数据访问层,BLL business logic layout,业务逻辑层,
      3. Model层不知道其他层的存在,不用引用其他层。
      4. DAL 引用Model 层,知道对应的数据数据库放在哪儿。
      5. BLL 引用MOdel层和 DAL层。
      6. DAL sqlHelper助手类: 连接数据库 conString = "server=.;database=数据库名;UId= sa; pwd = sasa"; SqlConnection con = new SqlConnection(conString)
      7. SQLHelper: SQlCommad cmd = new SqlCommand("执行语句",con)
      8. SQLHelper:cmd.CommandType = CommandType.StoreProcedure /存储过程
      9. SQLHelper:con.Open()
      10. SQLHelper:SqlDataReader reader = cmd.ExecuteReader
      11. SQLHelper:DataTable table= new DataTable()
      12. SQLHelper:tavble.load(reader)
      13. object result = cmd.ExecuteScalar()
      14. int effectedRows = cmd.ExecuteNonQuery();
    4. Power Designer 建模
    5. 继续。。。  
  • 第三章 C#2.0
    1. C#2.0 新特性 :  泛型 ,委托,事件,匿名方法,迭代起器、分部类型、空属性, 静态类,
      • 泛型:定义,通过参数化类型实现类型的抽象化,从而得到更好的面向对象体验。
      1. 语言层面机制:C#泛型 由CLR在运行时支持,C#泛型在编译成中间语言IL代码或者元数据时候是一个占位符号,JIT(just-in-time)时候才会实例化泛型类型。两轮编译。
      2. Visual Studio 可以将多种编程语言转换为IL, IL 能在不同的平台转换为二进制代码。
      3. C#泛型采用“基类,接口,构造器,值类型,引用类型" 四种约约束来对类型参数的”显示约束".
      4. 泛型语法:声明注意点1):如果基类是泛型类型,他的参数要么已经实例化,要么子类要负责实例化。class
        G:C<U,V>{} 非法.  泛型类型的参数化。
        1. 泛型类型成员:
        2. 泛型接口:泛型接口的类型参数要么已经实例化,要么来源于实现接口的类。
        3. 泛型方法:
        4. 泛型约束:
          1. 泛型类型或者泛型方法的类型参数的任意假设,都要基于“显示约束”。
          2. 约束由 where 表达, 有基类,接口,构造器,引用类型、值类型四种约束。
          3. 若没有指定泛型的约束, 泛型类型的参数将只能访问object 中的共有方法。
          4. class A { public void F1() { } }

                class B { public static void F2() { } }

                class C<S, T>

                    where S : A,new()

                    where T : B

                {

                    public void FF()

                    {

                        S s = new S();

                        s.F1(); // 继承A1基类的F1方法

                     T.F2(); // 继承B1基类的F2方法

                    }       

                }

      • 委托 delegate: 将方法签名相同的类方法参数化,使得方法作为参数传递。
        1. 委托是由 delegate 修饰, 没有成员的类。
        2. 方法的返回类型和委托要一致。
        3. 方法的方法签名,即是参数类型参数个数参数顺序一致。
        4. 委托是很多方法的集合。委托代表很多方法。代表同一命名空间内,所有返回类型和参数列表相同的方法。方法参数化,横向提取
        5.  声明:delegate void GreetingPeopleDelegate(string name); 代表一众 没有返回值,输入参数为 string 的方法。
        6. 使用委托变量可以new 出来使用或者直接赋值委托变量
        7. 用 += 或者 -= 可以增加或减少委托挂载的方法集合。
        8. 委托和观察者模式
        9. 事件 event 和观察者模式
      • 事件 Event: 事件是被 event 关键字修饰的委托。
        1. 被 event  关键字修饰的委托,在类的外部只能 出现在 += 或者 -= 的左侧,即不能new,只能挂载。
        2. event 最好和 委托一起理解。
        3. 事件是一个特殊的多路广播。
      • 匿名方法(没有方法名的方法): 方法的声明和实例一块完成,代码直接与委托实例关联,(匿名方法定义委托的实现)
        1. 匿名方法对委托和事件的简化
        2. 匿名方法的参数列表:若在delegate 后面指定了参数列表,则必须和事件的委托类型相同。
        3. 匿名方法的返回值:必须和为委托的返回值兼容。
        4. 匿名方法的外部变量: 指的是匿名方法使用的局部变量或参数。
        5. btn.Click += delegate        { MessageBox.Show("这是一个匿名的无参的方法"); }: 匿名方法可以在delegate 后面跟一个参数列表,  其后的代码快可以访问这些参数。也可以不指定参数.
        6. 方法里面只有一句代码, 不先声明方法。 这句代码直接与委托实例关联,没有专门声明方法名。匿名!
        7.  无参数 delegate 参数声明的 括号都省略了。
        8. 如果有参那就一定要和当前修饰的委托 的签名要求的参数类型和个数相匹配
        9.    delegate int AddDelegate(int a, float b);
                      AddDelegate ad = delegate(int aa, float bb)
                      {
                          return aa + (int)bb;
                      };          
        10. 静态方法中的匿名方法。
        11. 实例方法中的静态方法。
      • 迭代器 foreach
        1.  yield rerurn 产生枚举元素
        2. for(int i = count -1;i>=0;--i)

            {

            yield return   imtes[i];

            if(????????)

            yield break;

            }

        3. IEnumerable 接口调用了 IEnumerator 接口, IEnumerator 接口 实现了
        4. IEnumerator 接口:Object Current 方法返回元素,bool MoveNext 指向下一个, Void reset 创建枚举数后资源被修改
        5. 在调用 MoveNext 或 Reset 之前,Current 返回同一对象。MoveNext 将 Current 设置为下一个元素。
        6. foreach本质上是这样调用的,
                      IEnumerator myrator = peopleList.GetEnumerator();
                      myrator.Reset();
                      while (myrator.MoveNext())
                      {
                          Person p = (Person)myrator.Current;
                          Console.WriteLine(p.firstName + " " + p.lastName);
                      }
        7. 支持对非泛型集合的简单迭代。
          IEnumerator 是所有非泛型枚举数的基接口。
      • 分部类型 partial:允许在不同的cs文件定义同一个class /类
        1. partial 只有 和 calss struct interfsace 放在一起时,才做 分部关键字来理解。其他地方,partial做变量名 也OK。
        2. 一个分部式的类,其各个部分要在同一个命名空间内。
        3. 分部是在编译之前的分部, 程序编译是会把各个部分组合当成把一个类来处理。
        4. 各个分部的访问级别,修饰返回类型擦描述形式等不能彼此冲突。
        5. 如果一个局部修饰  是  sealed 密封类或者 abstract 抽象类, 那么整个都是 密封或者抽象的。
        6. 局部类型的基类或接口,指定的基类必须一致。
        7. 各个分部类指定实现了不同个数和功能的基类,则这个类指定实现的基类个数和种类的基类的最大组合叠加。

      • 空属性: 允许一个值类型具有空值的意义。
        1. Int ? X =I, 表示 x 有两大组成, int 集合和空值。
        2. 三元运算符: (条件表达式)?执行表达式1:执行表达式2           条件表达式成立, 执行表达式1, 不成立执行表达式2.
      • 静态类:只用于包含静态成员的类型, 即静态类的成员都是静态成员。既不能实例化(new), y也不能被继承,相当于abstract  sealed 的类。
        1. Const 修饰: 限定一个变量不可以被改变
        2. 静态类不能 有实例构造器,即能不new
        3. 静态类不能有实实例成员。
        4. 静态类成员不能有 preotected 、 protected intenal 修饰.
        5.  相当于  mabstrat sealed , 不能在用 abstract 和 sealed 修饰。
        6. 默认继承自 sy.Object, 不能显示指定其他基类。
        7. 不能指定任何接口
      • 属性访问器保护级别变化: c# 2.0 允许对一个属性的 set get 访问设置不同的访问修饰
        • •C#2.0允许我们对一个属性的get和set访问器使用不同的访问修饰符:
          public string Name // 已经是public的,其成员至少有一个是可以访问的, 不能所有成员属性都和public冲突。

            {

            get{return this.name;}

            private set{this.name=value;}

            }

      • 命名空间限定: C# 2.0 允许使用命名空间别名限定符  ::。避免不同命名空间中类型名称冲突的问题。库级别特性
      • 继续
    2. C# 3.0 特性
    3. 局部类型、空属性类型、静态类
    4. Lin
  • 第四章 C# 3.0特性
    • 隐含类型局部便变量 var
      1. var 隐藏类型局部变量 与c# 是强类型语言并不冲突,因为在编译得出时候, 能知道var ju具体指代是什么类型。编译时候推断
      2. var  在 foreach (var  i in ListA) {}迭代时, 可以指代不同的类型的变量。 
      3. var 声明仅局限于 局部变量, 不能放在字段里面。
      1.  
    • 扩展方法: 本质会转换为对非泛型静态类中的静态方法的调用: static class{ static Method(){}}
      1. 静态class没有构造函数吗,不能new
      2. 扩展方法允许我们在不改变源代码的情况下扩展(添加)类型中的实例方法。扩展方法参数要带 this 关键字
      3. 静态方法通过点操作符号点出来。
    • 集合初始化器
    • 匿名类型 :可以用 new 关键字调用匿名初始化器创建一个匿名类型的对象。匿名类型直接继承Sys.Object
    • Lambda 表达式:
      1. 扩展方法传递命名方法(写好的方法名)-->--匿名方法-》传递匿名委托实例--》
      2. Lamda表达式的参数类型可以忽略, 因为可以通过上下文推断
      3. lambda表达式  : 可以被转换为委托类型 如下。
      4. var ShortWordsByLambda =
                words
                //.Where(delegate(string w) { return w.Length <= 5; }) // 匿名方法, 方法实例和声明一起。
                .Where(w => w.Length <= 5)              // Where(参数1, 参数2)  参数1是实现IEnumerable接口的可迭代项, 参数2是是返回bool值的委托。
                .Select(word => word); // 直接参数  Select(参数1, 参数2)  参数1是实现IEnumerable接口的可迭代项, 参数2是是返回bool值的委托。
      5. 。。。
    • Linq 实际就是Lambda 表达式。
      1. Linq-To-Sql: DataContext 是 Connection Command 的合体。
      2. Linq-To-Xml : XmlDocument doc = new XmlDocument();
            XmlElement root = doc.CreateElement("books");
      3. 表达式树: & |     按位与 按位或
      4. IEnumerable<T> : 数组均实现了这个接口,IEnumerable<T> 接口是Linq 的核心。
      5. Linq 的标准操作查询操作符 where select order orderBy 等都要使用IEnumerebe 类型对象作为参数。这是标准操作符都是扩展方法。
      6. 在 Linq 中, 序列是指所有实现了IEnumerable 接口的对象。
      7. 迭代器允许我们访问集合中的每一个元素,在。Net 叫做迭代器, 在python 叫生成器, 在 数据库相关的叫做游标。迭代器实质上是对 index 的操作。foreach 实质是对 current h和moveNext 的调用。
      8. 查询操作符本质是查询上下文中使用的一系列扩展方法的集合。
      9. 常用的查询操作符: where select  orderBy GroupBy distinct
      10. Linq -Sql 生成的是 sql 查询语句, 只有在把结果集Tolist 或者 foreach 迭代的时候才会抓出结果。
      11. Linq-To-Xml :查询结果生成Xml数据。
      12. foreach 跌带的时候才会去计算 比如 数学计算方法 加减乘除。 在linq语句里面只是一个查询语句。
      13. ToList ToArray 立即查询, 会将查询转换为静态的结果集合。
      14. Linq-To-Object 
      15. 查询表达式并没有能够一 一对应查询操作符, 操作符能完成更多功能

  • 第五章 MVC设计模式: Model View Controller
    1. MVC 理论
      1. MVC 不同于三层架构,MVC是表现模式,三层架构是架构模式。  View 和Controller 同属于UI界面层。
    2. Model f负责从数据库中取得数据。并转换成对象
    3. Controller 调用Model 选择在哪个View 渲染给用户看。
    4. MVC 最核心的原则是分离程序各个部分的关注点
    5. MVC 自带的增删查该
    6. View前端向用户显示数据和结果。
    7. Linq-EF 实体模型建立数据库.
    8. Razor:
      1. Razor,通过理解标记的结构来实现代码和标记之间尽可能顺畅的转换
      2. 主要的转换标记:@ at符号, 用作标记和代码的转换字符。主要是代码表达式和代码块。
      3. @ViewBag.term, 代码表达式
      4. 没有转义的需要时候,做字面量@()
      5. @@来表示 @ 符号
      6. 代码块 @{}
      7. @foreach(){}
    9. 向 View 页面传值的方式:
      1. Controller向View 层,ViewBag=要传输的数据 ViewData, href
      2. ViewBag只是把暴露ViewData简单包装成一个dynamic动态属性
      3. 任何引用ViewData 字典取值的代码可以修改成ViewBag
      4. ViewBag.name="张三",可以把与主要视图模型无关的值用Viewbag传递。ViewBag.term=term//a 标签href 解析传递的值;
      5. ViewData["name"]="张三";
      6. Controller 控制器 Return View(数据集合Model/ViewMode视图模型)
      7. View 向 Controler 控制器的传值 a 的href 传递
      8. <img src=@Url.Content("~/head.jpg")> ,会在渲染成Html代码成对应的路径
      9. @Html.AcctionLink("HomePage",Index,"Home"),会在html页面渲染成
      10. <a href="Index/Home">HomePage</a>
    10. View-Model 传值
    11. 模板页继承页分布式布
  • 第六章 Asp.net
    1. Http 协议: 请求完就断开
    2. 状态管理:Cookie 在客户端保存值。
    3. 试图状态:本页面多次请求间保持状态。ViewState 本页面传值。配合 IsPostBack 可以存储 本页面的前一次请求的值。Page_PreRender 页面预呈现事件。
    4. Request.Form["UserName"]-- 服务器端和客户端传值。 Input type= UserName
    5. Request.QueryString["userName"]-- 服务器断客户端传值 <a href="xxx.aspx?username=ghz"></a>
    6. Session[""] 保存在服务器端。
    7. runat= server 的控件传值到服务器端。
    8. 将数据绑定显示到 GrideView 控件。DataSource=XX; DataBind();
    9. 页面跳转 重定向: Response.Redirect(url)  --url = xxx。aspx?xx
    10. Server.Transfer, 页面跳转。Server.Transfer("CrossPage2.aspx",true);  PreviousPage.Title
    11. 控件 Repeater literral
    12. 页面跳转页面传值 

 

posted on 2018-10-06 10:09  Tivoli  阅读(258)  评论(0编辑  收藏  举报