C#精华(文章3版本)笔记
C#精华(文章3版本)
C#概述
- C#keyword:... add* alias* ascending* base by* descending* dynamic* equals* from* get* global* group* let* var* value* yield* ...
- e.g. 1.0 --> 2.0: yield return
- 将keyword作为局部变量使用:@return
- CIL和ILDASM
数据类型
- decimal:1.2345m
- @" ... ///\\\ .... "
- int? a = null; //C# 2.0
- int[,] cells;
- .Length 属性
- .GetLength(0) 获取第1维的长度
- 交错数组:int[][] cells2; //!
运算符和控制流
- foreach(char c in str){ ... }
- switch-case:支持字符串常量?C#不同意fall-through?但case能够连起来写
- C# 2.0 空接合:expr1?? expr2;(这是?:的某种简化)
- C#支持预处理?靠
- #region #endregion
方法和參数
- using System;
- C# 4.0 可选參数(这一般不是C++才有的特性吗)
- C# 4.0 命名參数(这是一般脚本语言中才有特性!)
- 异常catch顺序:从最详细到最一般?——是否应该看异常在代码运行流程中可能出现的先后顺序呢???
- int.TryParse(ageText, out ageVar) //见鬼。这不如Ruby灵活
类
- this(=VB里的Me)
- 属性是CIL中的一种显式的构造:
- .property instance string Name(){
- .get instance string ClassA::get_Name() //引用实际生成的getter方法
- .property instance string Name(){
- C# 3.0 对象初始化器
- 集合初始化器:l = new List<Employee> { ... }
- this调用还有一个构造器:恩,有点类似于C++的成员初始化列表,或者是Java的构造函数间调用
- C# 3.0 匿名类型:var p = new { Name="ABC", Age=20 };//不要滥用,可能有性能问题?
- 静态构造器:static ClassName() { ... } //这与Java的static{}相比,语法稍显累赘了
- C# 3.0 扩展方法:定义一个static方法。模拟为相应类的成员函数(第1个參数声明需加上this限定)——这仅仅是一个编译期特性,st
- const vs. readonly(Java final?)
- C# 2.0 部分类 partial class A { ... } //不同意对编译好的类进行扩展,用于分解实现代码到多个文件——看来又是一个编译期特性,st
- C# 3.0 部分方法:必须返回void?不同意out參数,但能够用ref
- 可在一个partial class里声明,在相应的还有一个partial class里实现?有点像C/C++了。哈
继承
- 自己定义类型转换:public static implicit operator OtherType(ThisType obj) { ... }
- sealed class ...
- virtual:C#默认都是非虚方法(fk,这是有益跟Java划清界限啊?)(可能是.NET CLR为了兼容C++语言作出的设计。。
。
)
- 子类重写:override
- new修饰符?
- override sealed //禁止进一步的派生实现;
- base:调用基类版本号的实现 //C#语言最大的问题是keyword是不是太多了???
- 子类重写:override
- abstract
- is //Java instanceof
- as
接口
- interface
- interface A : B //不须要Java里extends与implements的区分。
值类型(struct)
- Java里没有区分,尽管概念上有EJB、DTO、POJO等的差别,因此也能够说C#对概念的分类更清晰些
- default(int)
- box/unbox
- lock不能用于System.ValueType?
- enum
合式类型
- 在对象的生命周期内,GetHashCode()应该返回同样的值,即使对象的数据发生了改变(。。
。?)
- ReferenceEquals?
- 名字空间别名限定符:extern alias CoordPlus;
- csc /R:CoordPlus=cp.dll ... Program.cs
- 终结器:~ClassName() { Close(); ...}
- using(RAAI):必须实现IDisposable?
- C# 4.0 延迟初始化:System.Lazy<T> //有点函数编程的味道~
异常处理
- 无參数的catch{}:有点像C++里的catch(...){}
- throw; 不要 throw new Exception ?(后者会重置异常栈)
- checked/unchecked{}块
泛型
- Pair<TFirst,TSecond> --> C# 4.0 Tuple 最多可处理7个參数
- 约束:
- class BinTree<T> where T: System.IComparable<T> { ...
- *协变(upcast,covariance)/逆变
- C# 4.0 使用out类型參数(<out T>)同意协变性
- C# 4.0 使用in类型參数(<in T>)同意逆变性
托付和Lambda表达式
- C# 3.0 delegate
- C# 2.0+ 匿名方法:delegate( args... ) { ... }
- C# 3.0 Func<T>:in* + out{1}
- C# 3.0 Lambda://实际上是用delegate实现的???
- (int a, int b) => { return a+b; }
- 当1个參数时能够不用()
- Lambda表达式不须要{}
- 注意:Lambda表达式无类型
- 外部变量(数理逻辑里的‘自由变量’?)
- 表达式树?
事件
- 多播托付(即delegate类型(=> event handler)的+=语法)
- 调用之前检查托付是否null?且先拷贝到一个局部变量。。。
- +=:System.Delegate.Combine(?内部实现应该是JavaScript的那种方式:递归调用,而不是list遍历)
- p394 eventkeyword的目的就是提供额外的封装,避免你不小心地取消其它订阅者
- public deletegate void MyEventHandler(object sender, EventArgs a);//声明托付类型;
- public event MyEventHandler onMyEventHandler = delegate {};//禁止赋值;
支持标准查询运算符的集合接口(C#
3.0引入的新的Enumerable类扩展)
- p407 匿名类型是C#支持‘投影’操作的关键 ...
- IEumerable<T>
- foreach时不要改动集合
- 集合类不支持支持IEnumerator<T>,而是通过GetEnumerator()返回一个IEnumerator<T> (恩?有点像Ruby。。。),这保证了对集合的并发訪问(?)
- Current()/MoveNext()
- 一旦实现GetEnumerator,就能够得到免费的50多个扩展方法(须要using System.Linq;)
- p419 从技术上说。Where()的结果是一个monad,它封装了依据一个给定的谓词对一个给定的序列进行筛选的操作。
- 并行LINQ:fileList.AsParallel().Select( ...
- 1 OrderBy() --> 得到一个IOrderedEnumerable<T> --> * ThenBy()
- *Join
- *GroupBy
- *GroupJoin
- + SelectMany:实现外部连接?
- *IQuerable<T>:使自己定义的LINQ Provider成为可能
LINQ(有了LINQ,你不再须要ORM;你也不须要编写集合处理过滤类的代码。简洁优雅地实现数据查询筛选处理的功能)
- e.g. ... = from word in Keywords where !word.Contains('*') select word; //from在前,类似于XQuery的语法。
- from下的let子句(这能够避免反复创建同样的对象。
。。)
- from filePath in ... let file = new File(filePath) orderby file.Length, filePath select file;
- from与select返回之间能够插入group操作:
- ... group word by word.Contains('*') into(延续) groups ...
自己定义集合
- 在方法public IEnumerator<T> GetEnumerator()的内部多次yield return???
- 编译器会生成代码以维护一个状态机
- yield break:取消迭代
反射、特性和动态编程
- System.Type
- obj.GetType()
- typeof( obj );
- System.Attribute 特性:(有点像JDK 5里的标注?)
- C# CLR最大的特定是代码数据都能够加上丰富的语义标记。。
。
- C# CLR最大的特定是代码数据都能够加上丰富的语义标记。。
- dynamic数据类型:可发起动态的成员方法调用(duck typing)
- p532 实现自己定义动态对象
多线程
- System.Threading和System.Threading.Tasks
- .NET 4.0:TPL和PLINQ
- Task的(属性)成员:
- IsCompleted
- Status
- Id
- AsyncState
- Task.CurrentId
- *ContinueWith():任务链?
- 调用最后一个Task对象的Wait()启动整个链的运行?
- 取消Task:CancellationToken(实际上就是一个条件信号量?)
- Parallel.ForEach(files, (file)=> {...} );
- ThreadPool.QueueUserWorkItem
同步和其它多线程处理模式(TPL)
- Task.Factory.StartNew
- Monitor
- lock //同Java synchronized?
- 避免lock this。typeof(type),string(intern的问题)
- System.Threading.Interlocked
- 将托付赋给一个局部变量的做法:对于+=自然是没有问题(如果它是并发改动安全的数据结构),但-=呢?
- System.Threading.Mutex
- APM(异步编程模型):X() --> BeginX / EndX
- 基于事件的异步模式(EAP)
- Background Worker模式
平台互操作和不安全的代码
- P/Invoke
- ref
- SafeHandle
- unsafe:调用C++代码?
- fixed(byte* p = &bytes[0]) { ... }
- stackalloc
附录:CLI
附录:下载和安装(.NET和Mono)
附录:System.Collections.Concurrent
附录:C# 2.0 3.0 4.0主题
版权声明:本文博客原创文章。博客,未经同意,不得转载。
C#精华(文章3版本)笔记的更多相关文章
- Web 前端开发精华文章推荐(HTML5、CSS3、jQuery)【系列二十三】
<Web 前端开发精华文章推荐>2014年第2期(总第23期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- 【springcloud】springcloud Greenwich SR4版本笔记
springcloud Greenwich SR4版本笔记 本文只记录实际版本,配置,pom,代码以及注意事项.别的在其他springcloud 的F版本中已有详述. 示例代码地址:https://g ...
- Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列十七】
<Web 前端开发精华文章推荐>2013年第五期(总第十七期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...
- Web 开发精华文章集锦(jQuery、HTML5、CSS3)【系列二十七】
<Web 前端开发精华文章推荐>2014年第6期(总第27期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- Web 前端开发人员和设计师必读精华文章【系列二十六】
<Web 前端开发精华文章推荐>2014年第5期(总第26期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- Web 前端开发精华文章推荐(HTML5、CSS3、jQuery)【系列二十二】
<Web 前端开发精华文章推荐>2014年第一期(总第二十二期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML ...
- 【圣诞特献】Web 前端开发精华文章推荐【系列二十一】
<Web 前端开发精华文章推荐>2013年第九期(总第二十一期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 ...
- Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列二十】
<Web 前端开发精华文章推荐>2013年第八期(总第二十期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...
- Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列十九】
<Web 前端开发精华文章推荐>2013年第七期(总第十九期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...
随机推荐
- linux进程通信之共享内存
共享内存同意两个或多个进程共享一给定的存储区,由于数据不须要来回复制,所以是最快的一种进程间通信机制.共享内存能够通过mmap()映射普通文件(特殊情况下还能够採用匿名映射)机制实现,也能够通过系统V ...
- 4.锁定--Java的LockSupport.park()实现分析
LockSupport类是Java6(JSR166-JUC)引入的一个类,提供了主要的线程同步原语. LockSupport实际上是调用了Unsafe类里的函数.归结到Unsafe里,仅仅有两个函数: ...
- SQL Server 开发利器 SQL Prompt 6.5 T-SQL智能感知分析器 下载地址 完全破解+使用教程
SQL脚本越写越多,总是觉得编写效率太过于低下,这和打字速度无关.在我个人编写SQL脚本时,至少会把SQL的格式排列成易于阅读的,因为其他人会阅读到你的SQL,无论是在程序中或是脚本文件中,良好的排版 ...
- 轻松搭建Windows8云平台开发环境
原文:轻松搭建Windows8云平台开发环境 Windows Store应用是基于Windows 8操作系统的新一代Windows应用程序,其开发平台以及运行模式和以往传统平台略有不同.为了帮助更多开 ...
- 【Android基础】listview控件的使用(4)-----自定义布局的listview的使用
前面我介绍了listview控件的不同用法,但是这些用法在实际的开发项目中是不足以满足需求的,因为前面的几种用法只能简单的显示文本信息,而且布局都比较单一,很难做出复杂的结果,在实际的开发项目中,90 ...
- iOS如何添加照片模拟器(附带诉讼)
刚開始做图片选择时,使用了最笨的办法给iphone模拟器添加照片. 方法一:首先打开safari.然后找到图片.点击图片,保存到本地(iphone): 方法二:拖动本地计算机的随意一张照片到iphon ...
- 两次fclose引发的血案
代码本来在Windows上开发的,功能基本完毕迁移到Linux上,结果一跑,乱象重重.这里只列出两个. 一崩溃: /mnt/diskc/db/app/bin/mysqld: double free ...
- HDU2149-Public Sale
Public Sale Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- ASP.NET vNext or .NET vNext?
ASP.NET vNext or .NET vNext? 从概念和基础开始 vNext在曝光以来绝大多数以ASP.NET vNext这样的的字眼出现,为什么这边会提及.NET vNext?原因是我认为 ...
- 【七】注入框架RoboGuice使用:(Your First Custom Binding)
上一篇我们简单的介绍了一下RoboGuice的使用([六]注入框架RoboGuice使用:(Singletons And ContextSingletons)),今天我们来看下自己定义绑定(bindi ...