zoukankan      html  css  js  c++  java
  • 观看视频后的笔记

    泛型

    2.0 泛型的好处和原理
    泛型:解决代码重用,满足不同类型的参数 可以用相同的方法,接口,或者类
              调用的时候 不需要声明类型,由编译器推断出来
              但是 类型参数和参数必须匹配 

    泛型的思想 就是延迟声明
    延迟声明:把参数类型的声明推迟到调用的时候声明
    架构设计有一句话: 延迟 ,推迟一切可以推迟的东西

    System.Collections.Generic.List`1[System.Int32]
    ___ ` 表示 占位符, 有几个类型参数 就显示几

    IL:中间语言

    {}叫做code block,代码块。
    代码块的作用有两个,一个是作为界符,比如一个if包含多个语句,那么如果没有{},就不知道if内执行的语句和if后执行的语句怎么区分
    另一个是控制变量作用域

    泛型约束,基类约束:
    1 在泛型方法内可以直接使用基类的属性和方法
    2 调用的时候,只能传递基类或者基类的子类

    泛型约束 目标 就是 让上边调用者 更少的犯错

    in 逆变,out 协变 只存在泛型接口或者泛型委托中  作用 扩展泛型的使用
    out 协变 只能是返回结果 用于父类可以实例子类
    in  逆变 只能是参数 用于子类可以实例父类

    反射

    原理:ado.net提供的帮助类库,可以读取我们编译生成的metadata(元数据)里面的信息

    作用一:通过配置文件App.config+简单工厂,可以把项目变成可配置的,可扩展


    操作

    引用命名空间 using System.Reflection;
    //1 动态加载  默认加载当前路径的dll文件,不需要后缀
    Assembly assembly = Assembly.Load("Ruanmou.DB.Sqlserver");
    //2 获取类型 (获取类型信息的方式不止一个)
    Type typeDBHelper = assembly.GetType("Ruanmou.DB.Sqlserver.DBHelper");
    //3 创建对象
    object oDBHelper = Activator.CreateInstance(typeDBHelper);

      

    简单工厂

    原理:把创建对象的代码转移到另一个类,好处就是逻辑独立

    案例

      public class SimpleFactory
        {        //IDBHelper 配置文件里面的key
            private static string IDBHelperConfig = ConfigurationManager.AppSettings["IDBHelper"];
    
            public static IDBHelper CreateDBHelper()
            {
                string dllName = IDBHelperConfig.Split(',')[1];
                string className = IDBHelperConfig.Split(',')[0];
    
                Assembly assembly = Assembly.Load(dllName);
                Type type = assembly.GetType(className);
                object oObject = Activator.CreateInstance(type);
                return (IDBHelper)oObject;
    
            }
        }
    

      

     委托和Lambda

     委托是一种类型

    委托的声明

    public delegate void NoReturnNoPara();//无参
    public delegate void NoReturnNoPara(int id,string str);//有参

     不影响到我们编译 不需要升级运行环境 由编译器提供(转中间语言)的快捷方式叫语法糖

     如果是调用当前实例方法用this识别

     lambda表达式:是一个匿名方法,是一个方法
                              左边是参数    中间=>(goes to)  右边是方法体   C#3.0

     {
        NoReturnWithPara method = new NoReturnWithPara(
                 (int id, string name) =>//goes to
                     //lambda表达式:本质是一个匿名方法,是一个方法
                     {
                         Console.WriteLine(nameOut);
                         Console.WriteLine("{0} {1} DoNothing");
                      });
          method.Invoke(4, "Nine");
     }
     {
         NoReturnWithPara method = new NoReturnWithPara(
                     (id, name) =>
                       //去掉参数类型,原因是委托的约束
                       {
                         Console.WriteLine("{0} {1} DoNothing");
                        });
         method.Invoke(5, "小昶");
    }
     {
         //如果方法体只有一行,那么可以去掉大括号和分号,多行不行
         //如果参数只有一个  可以去掉小括号
         //如果没有参数,直接用小括号
    
         NoReturnWithPara method = new NoReturnWithPara((id, name) => Console.WriteLine("{0} {1} DoNothing", id, name));
         method.Invoke(6, "梦醒时分");
    }  
    //匿名类
     var model = new
      {
        Id = 1,
        Name = "Alpha Go",
        Age = 21,
        ClassId = 2
      };  匿名类 只读 不能修改

    扩展方法:静态类 静态方法  第一个参数类型前面加上this

     可以将 ExtendShow.ToInt(ivalue);换成 ivalue.ToInt() 

        定义的类

     public static class ExtendShow
        {
            public static int ToInt(this int? iParameter)
            {
                return iParameter ?? 0;
            }
    
            public static void NoShow(this LambdaShow show)
            {
                Console.WriteLine("这里是扩展的 NoShow");
            }
    }
    

      调用

    {
              int? ivalue = null;
              int? ivalue2 = 1;
    
              int i = ExtendShow.ToInt(ivalue);
              int i2 = ivalue.ToInt();
     
    }
    

    sql添加数据后,返回新增的ID,两种方式

    1:insert ;select @@identity

    2:insert into [{0}] output insertd.id values({1})

    封装 继承 多态

    面向对象的方法主要是把事物给对象化,
    包括其属性和行为。
    面向对象编程更贴近实际生活的思想。
    总体来说面向对象的底层还是面向过程,
    面向过程抽象成类,
    然后封装,方便使用就是面向对象,(万物皆对象)。

    封装:隐藏对象的属性和实现的细节,仅对外提供公开字段,公共方法

    好处:防止对外错误的修改 重用性更高 

    继承:好处(代码的重用)一个类只能有一个父类,继承之后可以拥有父类的属性和一切行为,好的坏的都得要

    多态:多个类可以继承自同一个类。

    注意:子类中如果重写了父类的方法(多态),那么父类中的这个方法将不会再调用。

    抽象类

     抽象类是一个类,里面可以包含一切类可以包含的
     抽象成员 必须包含在抽象类里面,抽象类还可以包含普通成员
     继承抽象类后,必须显示的override其抽象成员
     抽象类不能直接实例化,声明的对象只能使用抽象类里的方法,不能用子类新增的方法
     父类只有一个
     is a

     抽象方法一定要写在抽象类中

     public abstract class BasePhone
    {

      public abstract string Brand();

    }

    接口

    接口不是类,里面可以包含属性、方法、事件 不能包含字段,委托,不能用访问修饰符(因为默认都是public)
    接口只能包含没有实现的方法
    实现接口的话,必须实现全部方法
    接口不能直接实例化,声明的对象只能使用接口里的方法,不能用子类新增的方法
    接口可以实现多个
    can do 

    接口叫实现,抽象类叫继承

    接口不需要override关键字,抽象类需要override

    抽象类/类就是用来描述是个什么东西

    模板化,减少一定代码量

    接口就是用来表示我们能做什么,能干什么

    功能化,增加一定灵活性

     "抽象类是对象的抽象,然接口是一种行为规范"。


    virtual :虚方法

    /// <summary>
    /// virtual  虚方法  必须包含实现 但是可以被重载
    /// </summary>
    public virtual void VirtualMethod()
    {
       Console.WriteLine("ParentClass VirtualMethod");
    }
    

    调用对象原则和就近原则

    普通方法是由编译时决定的
    虚方法是由运行时决定的 

    重载 方法名一样,参数个数不一样,参数类型不一样,返回值类型可以不相同,编译时多态

    重写(override),方法名的相同,相同的参数 ,相同的返回值类型,只有虚方法和抽象方法才能被覆(重)写,运行时多态

    sealed 密封之后不能在被override

    public sealed override void AbstractMethod()
    {
       Console.WriteLine("ChildClass AbstractMethod");
    }

    委托(二)和事件

    委托是一种类型,可以放在类外和里面。

    继承了一个特殊类(MulticastDelegate,多步委托),不能被任何类继承,由编译器和其他工具派生

    C#中的多线程都是基于委托的

    委托  把方法包裹成了一个变量  等我们需要的时候再去执行它

    //方法放到委托内
    //2 委托的实例化 
    NoReturnNoPara method = new NoReturnNoPara(this.DoNothing);
    method.Invoke();//3 委托的调用
    method();
    //方法
    private void DoNothing()
    {
         Console.WriteLine("This is DoNothing");
    }
    

     +=就是发生这个事件的来同时要通知你,-=就是发生这个事件不再来通知你了。

    事件是一个特殊的委托

    cat.MiaoAction += new Stealer().Hide;
    cat.MiaoAction -= new Stealer().Hide;
    

     设计时用外键,创建数据库取消,程序保证外键关系

     一定要用外键的话,常用的有支付和流水

    SOA 面向服务架构  减低成本 

    OOP 面向对象  (属性和行为)。

    AOP 面向切面

    POP 面向过程编程

    SOAP 

    Remote/{*pathInfo} :路由器中  {*pathInfo}  表示所有路径

    读写分离:

    二八原则:20%写,80%读

     NoSql:非关类型系数据库 

    autosave 自动把数据保存硬盘

    C#----语言

    .net Framework -----平台

    包含

    BCL 基础类库

    CLR:公共语言运行库

    编程工具

    asp.net ----框架 

    又分:asp.net web from 和  asp.net MVC

    C#满足.net Framework 约束

    JIT 即时编译器,机器玛

    序列化就是把数据转成字符串

    反序列化就说把数据转成对象

  • 相关阅读:
    SSM应用(五)--参数绑定
    SSM应用(四)--SpringMVC入门
    Oracle常用函数
    SSM应用(三)--Spring整合MyBatis
    SSM应用(二)--注解的使用
    SSM应用(一)--Spring入门
    MyBatis学习(十四)--逆向工程使用
    MyBatis学习(十三)--缓存
    MyBatis学习(十二)--懒加载
    MySQL常用函数
  • 原文地址:https://www.cnblogs.com/shanshuiYiCheng/p/12568603.html
Copyright © 2011-2022 走看看