zoukankan      html  css  js  c++  java
  • MVC系列随笔二

    -》Linq
    1.隐式类型 var a=1;var b="哈哈";在不知道类型的情况下使用,IL会根据赋值类判断类型,不会影响效率。因为IL产生的中间一样。var 必须赋值。
    2.匿名类型 var entity= new {title="我是匿名类型",fun="我很有用"};
     把一个对象的属性copy到匿名对象中,不用显示指定属性的名字,原始的属性名字会被copy到匿名对象中。
     监视entity会发现它的类型就是Anonymous Type(匿名类型)
     不要试图在创建匿名对象的方法外面访问它的属性
     在特定的网站,序列化和反序列化JSON时有用
    3.自动属性
    4.对象初始化器 var obj=new Obj{id=GUID.NewGuid(),title="哈哈"}; var arr=List<int>(){1,2,3,4,5};
    5.委托
    6.泛型
       装箱:值类型转换为object类型; 拆箱:Object转换为值类型   装箱操作会导致性能损耗 泛型能解决这个问题
       Hashtable Queue Stack等非泛型容器会装箱,这些容器只能存储Object类型的数据
       List<T>、Dictionary<TKey,TValue>都是泛型

       自定义泛型
       public static class SomethingFactory<T>
       {
      public  static T InitInstance(T inObj)
      {
       if(false)
       {
        return  inObj;
       }
       return default(T);
      }
       }
       泛型约束:public static class SomethingFactory<T> where T:MyObj 只能传入MyObj类型或MyObj派生类
         或这样写:where T:MyObj,new()约束传入的类型必须有一个构造函数
     泛型的好处

          <1>算法的重用

            想想看:list类型的排序算法,对所有类型的list集合都是有用的

          <2>类型安全

          <3>提升性能

            没有类型转化了,一方面保证类型安全,另一方面保证性能提升

          <4>可读性更好
    7.泛型委托
     委托基本归为3类:
     <1>Predicate泛型委托
     var d1=new Predicate<int>(More);
     定义:表示定义一组条件并确定指定对象是否符合这些条件的方法
        obj 要按照由此委托表示的方法中定义的条件进行比较的对象
        T 要比较的对象的类型
        返回结果 如果obj 符合由此委托表示的方法中定义的条件,则为true;否则为false
        pubic delegate bool Predicate<in T>(T obj);
        缺点定义太死,必须有一个返回值,必须有一个参数
     <2>Action泛型委托
      可以有0个到16个输入参数,输入参数的类型是不确定,但不能有返回值
         var d3 = new Action(noParamNoReturnAction);
                    var d4 = new Action<int, string>(twoParamNoReturnAction);
           注意:尖括号中int和string为方法的输入参数
                static void noParamNoReturnAction()
                {
                    //do what you want
                }
                static void twoParamNoReturnAction(int a, string b)
                {
                    //do what you want
                }
     <3>Func泛型委托
     弥补Action泛型委托,不能返回值的不足,规定要有一个返回值,返回值的类型也由使用者确定
     var d5=new Func<int,string>(oneParamOneReturnFunc);
     注意:string 类型(最后一个泛型类型)是方法的返回值类型
         static string oneParamOneReturnFunc(int a)
                {
                    //do what you want
                    return string.Empty;
                }
    8.匿名方法
       var arr = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8 };
                //var d1 = new moreOrlessDelgate(More);
                //var d1 = new Predicate<int>(More);
                var d1 = new Predicate<int>(delegate(int item)
                {

               //可以访问当前上下文中的变量
                              Console.WriteLine(arr.Count);
                    if (item > 3)
                    {
                        return true;
                    }
                    return false;
                });
                Print(arr, d1);
                Console.WriteLine("OK");
          <1>代码可读性更好

          <2>可以访问当前上下文中的变量
    9.扩展方法
       扩展方法是静态类中的静态方法
       public static class MyClass
       {
      public static void ExtString(this String val)
      {
       Console.WriteLine(val);
      }
       }
       var a="aaa";
       a.ExtString();
       ----aaa----
          <1>扩展方法必须在一个非嵌套、非泛型的静态类中定义

            <2>扩展方法必须是一个静态方法

            <3>扩展方法至少要有一个参数

            <4>第一个参数必须附加this关键字作为前缀

            <5>第一个参数不能有其他修饰符(比如ref或者out)

            <6>第一个参数不能是指针类型
          注意事项

            <1>跟前面提到的几个特性一样,扩展方法只会增加编译器的工作,不会影响性能(用继承的方式为一个类型增加特性反而会影响性能)

            <2>如果原来的类中有一个方法,跟你的扩展方法一样(至少用起来是一样),那么你的扩展方法奖不会被调用,编译器也不会提示你

            <3>扩展方法太强大了,会影响架构、模式、可读性等等等等....

  • 相关阅读:
    linux中~和/的区别
    Linux centos 7安装
    xshell远程连接虚拟机
    虚拟机Linux不能上网简单有效的解决办法
    visudo
    users
    TreeSizeFree(硬盘文件整理)
    dos2unix
    iconv
    PS1系统变量
  • 原文地址:https://www.cnblogs.com/dongbo19910728/p/4305659.html
Copyright © 2011-2022 走看看