MVC系列隨筆二

來源:互聯網
上載者:User

標籤:

-》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>擴充方法太強大了,會影響架構、模式、可讀性等等等等....

MVC系列隨筆二

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.