您的位置:首页 > 编程语言 > C#

C#高级编程(第7版)读书笔记(一)

2012-03-07 15:03 246 查看
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章错误和异常
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: