C#的兩個侷限性。一方面是該語言不適用於編寫時間急迫或性能非常高的代碼,例如一個要佔用 1000或 1050個機器週期的循環,並在不需要這些資源時,立即清理它們。在這方面,C++可能仍是所有低級語言中的佼佼者。另一方面是C#缺乏性能極高的應用程序所需要的關鍵功能,包括能夠指定那些保證在代碼的特定地方運行的內聯函數和析構函數。但這類應用程序非常少。
第一部分c#語言
第1章.net體系結構
(1)C#的 結構和方法論反映了.NET基礎方法論。
(2)在許多情況下,C#的特定語言功能取決於.NET的功能,或依賴於.NET基類。
1.1c#與.net的關係
C#就其本身而言只是一種語言,儘管它是用於生成面向.NET環境的代碼,但它本身不是.NET的一部分。
1.2公共語言運行庫
1.3中間語言
1.4程序集
1.5net framework類
1.6名稱空間
1.7用c#創建.net應用程序
1.8c#在.net企業體系結構中的作用
1.9小結
第2章核心c#
第3章對象和類型
擴展方法
namespace Wrox
{
public static cl ass MoneyExtension
{
public static void AddToAmount(this Money money, decimal amountToAdd)
{
money.Amount += amountToAdd;
}
}
}
調用:Money實例.MethodName(amountToAdd)
第4章繼承
構造函數繼承層次,默認調用基類無參構造函數。如果基類無參構造函數聲明爲private或沒有無參構造函數,會出現編譯錯誤
類不能聲明爲private,protected,internal protected
第5章泛型
default
where T:struct/class/IInterfaceName/ClassName/new()/T1:T2
泛型接口,協變和抗變:必須用out或in標註
第6章數組
Net4 Tuple合併不同類型的多個對象。
排序:Sort()的第二個參數爲實現IComparer<T>接口的類實例。或沒有第二個參數
ArraySegment<T>
yield語句:yeild return, yeile break
元組Tuple:合併不同類型,8個泛型類1個靜態類。靜態類的create創建
IstructVralEquatabl e.Equals
第7章運算符和類型強制轉換
第8章委託、lambda表達式和事件
Action<T>,Func<T>委託
Action<T>返回void類型,可提供至多16種不同的參數類型。Action<in T>
Func<T>可調用帶返回類型的方法。Func<in T,out TResult>
多播委託:GetInvocationList()返回添加的多個委託方法。
匿名方法:delegate(params){}
Lambda表達式:3.0後用它替代匿名方法。(params)=>{}
事件:相當於委託變量,定義了某種約定委託類型的事件變量。
簡化記法和長記法。
弱事件模型:IWeekEventListener,WeekEventManager基類
第9章字符串和正則表達式
正則表達式:
\b單詞開頭或結尾
.除換行以外任意字符
*任意次數
+一次或更多
?0或1次
{n}前面項重複次數
{n,}重複n次或更多
{n,m}重複n到m次
[]任意一個裏面的字符可以用-表示範圍
\d任意的一個數字
\s任意一個空白符
\w字母或數字或下劃線或漢字
^字符串開始
$字符串結束
第10章集合
IList<T>,Queue,Stack,LinkedList,SortedList,Dictionary,Lookup,SortedDictionary,HashSet<T>,SortedSet<T>,ObservableCollction<T>,BitArray,BitVector32,BitVector32.Section,Concurrent,
Lookup<TKey,TValue>必須通過集合的ToLookup(Func<TSource,TKey>)創建。
第11章LINQ語言集查詢Language Integrated Query
用相同的語法訪問不同的數據源
from 開頭
中間可以用where,orderby,join,let,其他from
select或group結束
擴展方法:擴展現有類static ClassExtension,static Method(this class pname)
ToArray(),ToEnumerable,ToList
並行LINQ:AsParallel()
並行取消:WithCancellation(CancellationTokenSource.Token)
表達式樹:Expression<T>類型參數會爲Lambda表達式創建表達式樹。
LINQ提供程序:
第12章動態語言擴展
12.1DLR
允許添加動態語言Ruby和Python
12.2dynamic類型
編譯時不檢查類型,可改變類型。
動態對象不支持擴展方法,匿名函數也不能作爲動態方法調用的參數。
12.3包含DLR ScriptRuntime
ScriptRuntime,ScriptEngine,ScriptSource,ScriptScope
配置config文件,添加microsoft.scripting節
12.4DynamicObject和ExpandoObject
派生自DynamicObject需重寫TrySetMember,TryGetMember,TryInvokeMember方法
ExpandoObject是密封類
第13章內存管理和指針
類成員指針使用fixed
基於棧的指針stackalloc:type* pnames=stackalloc type[size]
pNames[i]和*(pNames+i)相同
第14章反射
AttributeUsage:AttributeTargets,AllowMultiple,Inherited
System.Type,System.Reflection.Assembly
Typeof或實例或靜態的GetType
Assembly.Load,LoadFrom
Attribute.GetCustomAttributes(assembly)
第15章錯誤和異常