多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > C#本質論(第3版)筆記

C#本質論(第3版)筆記

來源:程序員人生   發布時間:2014-11-19 08:41:23 閱讀次數:2313次

C#本質論(第3版)

跳轉至: 導航、 搜索

目錄

  • 1 C#概述
  • 2 數據類型
  • 3 運算符和控制流
  • 4 方法和參數
  • 5
  • 6 繼承
  • 7 接口
  • 8 值類型(struct)
  • 9 合式類型
  • 10 異常處理
  • 11 泛型
  • 12 拜托和Lambda表達式
  • 13 事件
  • 14 支持標準查詢運算符的集合接口(C# 3.0引入的新的Enumerable類擴大)
  • 15 LINQ(有了LINQ,你不再需要ORM;你也不需要編寫集合處理過濾類的代碼;簡潔優雅地實現數據查詢挑選處理的功能)
  • 16 自定義集合
  • 17 反射、特性和動態編程
  • 18 多線程
  • 19 同步和其他多線程處理模式(TPL)
  • 20 平臺互操作和不安全的代碼
  • 21 附錄:CLI
  • 22 附錄:下載和安裝(.NET和Mono)
  • 23 附錄:System.Collections.Concurrent
  • 24 附錄:C# 2.0 3.0 4.0主題

C#概述

  1. C#關鍵字:... add* alias* ascending* base by* descending* dynamic* equals* from* get* global* group* let* var* value* yield* ...
    1. e.g. 1.0 --> 2.0: yield return
    2. 將關鍵字作為局部變量使用:@return
  2. CIL和ILDASM

數據類型

  1. decimal:1.2345m
  2. @" ... /// .... "
  3. int? a = null; //C# 2.0
  4. int[,] cells;
    1. .Length 屬性
    2. .GetLength(0) 獲得第1維的長度
  5. 交錯數組:int[][] cells2; //!

運算符和控制流

  1. foreach(char c in str){ ... }
  2. switch-case:支持字符串常量?C#不允許fall-through?但case可以連起來寫
  3. C# 2.0 空接合:expr1?? expr2;(這是?:的某種簡化)
  4. C#支持預處理?靠
    1. #region #endregion

方法和參數

  1. using System;
  2. C# 4.0 可選參數(這1般不是C++才有的特性嗎)
  3. C# 4.0 命名參數(這是1般腳本語言中才有特性?。?/li>
  4. 異常catch順序:從最具體到最1般?――是不是應當看異常在代碼履行流程中可能出現的前后順序呢???
  5. int.TryParse(ageText, out ageVar) //見鬼,這不如Ruby靈活

  1. this(=VB里的Me)
  2. 屬性是CIL中的1種顯式的構造:
    1. .property instance string Name(){
      .get instance string ClassA::get_Name() //援用實際生成的getter方法
  3. C# 3.0 對象初始化器
    1. 集合初始化器:l = new List<Employee> { ... }
  4. this調用另外一個構造器:恩,有點類似于C++的成員初始化列表,或是Java的構造函數間調用
  5. C# 3.0 匿名類型:var p = new { Name="ABC", Age=20 };//不要濫用,可能有性能問題?
  6. 靜態構造器:static ClassName() { ... } //這與Java的static{}相比,語法稍顯累墜了
  7. C# 3.0 擴大方法:定義1個static方法,摹擬為對應類的成員函數(第1個參數聲明需加上this限定)――這只是1個編譯期特性,st
  8. const vs. readonly(Java final?)
  9. C# 2.0 部份類 partial class A { ... } //不允許對編譯好的類進行擴大,用于分解實現代碼到多個文件――看來又是1個編譯期特性,st
  10. C# 3.0 部份方法:必須返回void?不允許out參數,但可以用ref
    1. 可在1個partial class里聲明,在對應的另外一個partial class里實現?有點像C/C++了,哈

繼承

  1. 自定義類型轉換:public static implicit operator OtherType(ThisType obj) { ... }
  2. sealed class ...
  3. virtual:C#默許都是非虛方法(fk,這是故意跟Java劃清界限???)(多是.NET CLR為了兼容C++語言作出的設計。。。)
    1. 子類重寫:override
      1. new修飾符?
      2. override sealed //制止進1步的派生實現;
      3. base:調用基類版本的實現 //C#語言最大的問題是關鍵字是否是太多了???
  4. abstract
  5. is //Java instanceof
  6. as

接口

  1. interface
  2. interface A : B //不需要Java里extends與implements的辨別;

值類型(struct)

  1. Java里沒有辨別,雖然概念上有EJB、DTO、POJO等的區分,因此也能夠說C#對概念的分類更清晰些
  2. default(int)
  3. box/unbox
  4. lock不能用于System.ValueType?
  5. enum

合式類型

  1. 在對象的生命周期內,GetHashCode()應當返回相同的值,即便對象的數據產生了改變(。。。?)
  2. ReferenceEquals?
  3. 名字空間別名限定符:extern alias CoordPlus;
    1. csc /R:CoordPlus=cp.dll ... Program.cs
  4. 終結器:~ClassName() { Close(); ...}
  5. using(RAAI):必須實現IDisposable?
  6. C# 4.0 延遲初始化:System.Lazy<T> //有點函數編程的味道~

異常處理

  1. 無參數的catch{}:有點像C++里的catch(...){}
  2. throw; 不要 throw new Exception ?(后者會重置異常棧)
  3. checked/unchecked{}塊

泛型

  1. Pair<TFirst,TSecond> --> C# 4.0 Tuple 最多可處理7個參數
  2. 束縛:
    1. class BinTree<T> where T: System.IComparable<T> { ...
  3. *協變(upcast,covariance)/逆變
    1. C# 4.0 使用out類型參數(<out T>)允許協變性
    2. C# 4.0 使用in類型參數(<in T>)允許逆變性

拜托和Lambda表達式

  1. C# 3.0 delegate
    1. C# 2.0+ 匿名方法:delegate( args... ) { ... }
  2. C# 3.0 Func<T>:in* + out{1}
  3. C# 3.0 Lambda://實際上是用delegate實現的???
    1. (int a, int b) => { return a+b; }
    2. 當1個參數時可以不用()
    3. Lambda表達式不需要{}
      1. 注意:Lambda表達式無類型
    4. 外部變量(數理邏輯里的‘自由變量’?)
    5. 表達式樹?

事件

  1. 多播拜托(即delegate類型(=> event handler)的+=語法)
    1. 調用之前檢查拜托是不是null?且先復制到1個局部變量。。。
  2. +=:System.Delegate.Combine(?內部實現應當是JavaScript的那種方式:遞歸調用,而不是list遍歷)
  3. p394 event關鍵字的目的就是提供額外的封裝,避免你不謹慎地取消其他定閱者
    1. public deletegate void MyEventHandler(object sender, EventArgs a);//聲明拜托類型;
    2. public event MyEventHandler onMyEventHandler = delegate {};//制止賦值;

支持標準查詢運算符的集合接口(C# 3.0引入的新的Enumerable類擴大)

  1. p407 匿名類型是C#支持‘投影’操作的關鍵 ...
  2. IEumerable<T>
    1. foreach時不要修改集合
    2. 集合類不支持支持IEnumerator<T>,而是通過GetEnumerator()返回1個IEnumerator<T> (恩?有點像Ruby。。。),這保證了對集合的并發訪問(?)
      1. Current()/MoveNext()
    3. 1旦實現GetEnumerator,就能夠得到免費的50多個擴大方法(需要using System.Linq;)
  3. p419 從技術上說,Where()的結果是1個monad,它封裝了根據1個給定的謂詞對1個給定的序列進行挑選的操作。
  4. 并行LINQ:fileList.AsParallel().Select( ...
  5. 1 OrderBy() --> 得到1個IOrderedEnumerable<T> --> * ThenBy()
  6. *Join
  7. *GroupBy
  8. *GroupJoin
    1. + SelectMany:實現外部連接?
  9. *IQuerable<T>:使自定義的LINQ Provider成為可能

LINQ(有了LINQ,你不再需要ORM;你也不需要編寫集合處理過濾類的代碼;簡潔優雅地實現數據查詢挑選處理的功能)

  1. e.g. ... = from word in Keywords where !word.Contains('*') select word; //from在前,類似于XQuery的語法!
  2. from下的let子句(這可以免重復創建相同的對象。。。)
    1. from filePath in ... let file = new File(filePath) orderby file.Length, filePath select file;
  3. from與select返回之間可以插入group操作:
    1. ... group word by word.Contains('*') into(延續) groups ...

自定義集合

  1. 在方法public IEnumerator<T> GetEnumerator()的內部屢次yield return???
    1. 編譯器會生成代碼以保護1個狀態機
  2. yield break:取消迭代

反射、特性和動態編程

  1. System.Type
    1. obj.GetType()
    2. typeof( obj );
  2. System.Attribute 特性:(有點像JDK 5里的標注?)
    1. C# CLR最大的特定是代碼數據都可以加上豐富的語義標記。。。
  3. dynamic數據類型:可發起動態的成員方法調用(duck typing)
  4. p532 實現自定義動態對象

多線程

  1. System.Threading和System.Threading.Tasks
  2. .NET 4.0:TPL和PLINQ
  3. Task的(屬性)成員:
    1. IsCompleted
    2. Status
    3. Id
    4. AsyncState
    5. Task.CurrentId
  4. *ContinueWith():任務鏈?
    1. 調用最后1個Task對象的Wait()啟動全部鏈的履行?
  5. 取消Task:CancellationToken(實際上就是1個條件信號量?)
  6. Parallel.ForEach(files, (file)=> {...} );
  7. ThreadPool.QueueUserWorkItem

同步和其他多線程處理模式(TPL)

  1. Task.Factory.StartNew
  2. Monitor
  3. lock //同Java synchronized?
    1. 避免lock this,typeof(type),string(intern的問題)
  4. System.Threading.Interlocked
  5. 將拜托賦給1個局部變量的做法:對+=自然是沒有問題(假定它是并發修改安全的數據結構),但-=呢?
  6. System.Threading.Mutex
  7. APM(異步編程模型):X() --> BeginX / EndX
  8. 基于事件的異步模式(EAP)
  9. Background Worker模式

平臺互操作和不安全的代碼

  1. P/Invoke
  2. ref
  3. SafeHandle
  4. unsafe:調用C++代碼?
    1. fixed(byte* p = &bytes[0]) { ... }
    2. stackalloc

附錄:CLI

附錄:下載和安裝(.NET和Mono)

附錄:System.Collections.Concurrent

附錄:C# 2.0 3.0 4.0主題 

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲天堂一区二区三区四区 | 亚洲免费网站在线观看 | 在线观看欧洲成人免费视频 | 高清国产精品久久久久 | 午夜免费啪视频观看网站 | 福利片在线观看免费高清 | 好大好爽快点吃奶 | 亚洲福利一区二区三区 | 欧美三级观看 | jizz免费| 国产亚洲视频在线播放大全 | 精品国产一区二区三区免费 | 国产福利资源 | a天堂中文在线 | 欧美国产综合日韩一区二区 | 国产亚洲视频在线观看 | 亚洲制服欧美自拍另类 | 国产成人综合久久精品红 | 男女男精品视频 | 亚洲精品国产福利在线观看 | 亚洲爱视频 | 亚洲天堂久久久 | 久久久久免费 | 亚洲亚洲人成网站在线观看 | 亚洲区欧美中文字幕久久 | 一区二区三区四区在线播放 | 亚洲免费成人网 | 亚洲人成77777在线播放网站不卡 | 精品久久久久久免费影院 | 爽爽影院色黄网站在线观看 | 国产一区二区三区久久精品小说 | 日韩欧美高清 | 亚洲欧美天堂综合久久 | 九色亚洲 | 欧美18videosex性欧美老师 | 国产精品亚洲欧美 | 国产高清1024永久免费 | 国产在线h视频 | 午夜dj在线观看免费视频www | 国产精品99久久久久久人 | 波多野结衣 一区 |