C#精华(文章3版本)

跳转至: 导航搜索

文件夹

C#概述

  1. C#keyword:... 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. 将keyword作为局部变量使用:@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 可选參数(这一般不是C++才有的特性吗)
  3. C# 4.0 命名參数(这是一般脚本语言中才有特性!)
  4. 异常catch顺序:从最详细到最一般?——是否应该看异常在代码运行流程中可能出现的先后顺序呢???
  5. int.TryParse(ageText, out ageVar) //见鬼。这不如Ruby灵活

  1. this(=VB里的Me)
  2. 属性是CIL中的一种显式的构造:
    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 扩展方法:定义一个static方法。模拟为相应类的成员函数(第1个參数声明需加上this限定)——这仅仅是一个编译期特性,st
  8. const vs. readonly(Java final?)
  9. C# 2.0 部分类 partial class A { ... } //不同意对编译好的类进行扩展,用于分解实现代码到多个文件——看来又是一个编译期特性,st
  10. C# 3.0 部分方法:必须返回void?不同意out參数,但能够用ref
    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 //禁止进一步的派生实现;
      3. base:调用基类版本号的实现 //C#语言最大的问题是keyword是不是太多了???
  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?且先拷贝到一个局部变量。。。

  2. +=:System.Delegate.Combine(?内部实现应该是JavaScript的那种方式:递归调用,而不是list遍历)
  3. p394 eventkeyword的目的就是提供额外的封装,避免你不小心地取消其它订阅者
    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()返回一个IEnumerator<T> (恩?有点像Ruby。。。),这保证了对集合的并发訪问(?)
      1. Current()/MoveNext()
    3. 一旦实现GetEnumerator,就能够得到免费的50多个扩展方法(须要using System.Linq;)
  3. p419 从技术上说。Where()的结果是一个monad,它封装了依据一个给定的谓词对一个给定的序列进行筛选的操作。

  4. 并行LINQ:fileList.AsParallel().Select( ...
  5. 1 OrderBy() --> 得到一个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. 编译器会生成代码以维护一个状态机
  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. 调用最后一个Task对象的Wait()启动整个链的运行?
  5. 取消Task:CancellationToken(实际上就是一个条件信号量?)
  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. 将托付赋给一个局部变量的做法:对于+=自然是没有问题(如果它是并发改动安全的数据结构),但-=呢?
  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主题

版权声明:本文博客原创文章。博客,未经同意,不得转载。

C#精华(文章3版本)笔记的更多相关文章

  1. Web 前端开发精华文章推荐(HTML5、CSS3、jQuery)【系列二十三】

    <Web 前端开发精华文章推荐>2014年第2期(总第23期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  2. 【springcloud】springcloud Greenwich SR4版本笔记

    springcloud Greenwich SR4版本笔记 本文只记录实际版本,配置,pom,代码以及注意事项.别的在其他springcloud 的F版本中已有详述. 示例代码地址:https://g ...

  3. Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列十七】

    <Web 前端开发精华文章推荐>2013年第五期(总第十七期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...

  4. Web 开发精华文章集锦(jQuery、HTML5、CSS3)【系列二十七】

    <Web 前端开发精华文章推荐>2014年第6期(总第27期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  5. Web 前端开发人员和设计师必读精华文章【系列二十六】

    <Web 前端开发精华文章推荐>2014年第5期(总第26期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  6. Web 前端开发精华文章推荐(HTML5、CSS3、jQuery)【系列二十二】

    <Web 前端开发精华文章推荐>2014年第一期(总第二十二期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML ...

  7. 【圣诞特献】Web 前端开发精华文章推荐【系列二十一】

    <Web 前端开发精华文章推荐>2013年第九期(总第二十一期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和  ...

  8. Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列二十】

    <Web 前端开发精华文章推荐>2013年第八期(总第二十期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...

  9. Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列十九】

    <Web 前端开发精华文章推荐>2013年第七期(总第十九期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...

随机推荐

  1. Linux下关于解决JavaSwing中文乱码的情况(转)

    前两天在linux中运行java 老是出乱码,很苦恼,后来网上找了好多解决办法.有些可行,有些不可行,今天总结一下. redhed 貌似没出现乱码 本身就jdk就支持中文 红旗linux  suse等 ...

  2. improper Advertising identifier [IDFA] Usage. Your app contains the Advertising Identifier [IDFA] AP

    找到答案了.随便传个包上去.然后拒绝掉,又一次prepare to upload.就会出现选项. 相应选择就好了.

  3. iOS8推送消息的回复处理速度

    iOS8我们有一个新的通知中心,我们有一个新的通报机制.当在屏幕的顶部仅需要接收一个推拉向下,你可以看到高速接口,天赋并不需要输入应用程序的操作.锁定屏幕,用于高速处理可以推动项目. 推送信息,再次提 ...

  4. CentOS7 已安装telnet维修

    今天搞下 Centos 7 以下升级 openssl 和 openssh ,顺便说下安装 telnet # 设备 telnet 避 ssh 无法登录 yum -y install xinetd tel ...

  5. 应对黑客攻击SQL SERVER数据库中的一个案例

    最近发现挂在网上server不知怎的,重新启动,那server现在主要是开始IIS服务,SQL SERVER 服务. 远程登录.发现系统响应十分缓慢.一个明显的停滞感,打开任务管理器,CPU在基本用法 ...

  6. UVA434 - Matty&#39;s Blocks

    option=com_onlinejudge&Itemid=8&page=show_problem&category=457&problem=375&mosms ...

  7. Linux(Centos)中tcpdump参数用法详解(转)

    在linux下进行编程开发的人尤其是网络编程的人会经常需要分析数据包,那么一定会用到tcpdump,下面就是关于tcpdump的使用方法说明(1). tcpdump的选项 -a       将网络地址 ...

  8. chrome使用技巧(转)good

    阅读目录 写在前面 快速切换文件 在源代码中搜索 在源代码中快速跳转到指定的行 使用多个插入符进行选择 设备模式 设备传感仿真 格式化凌乱的js源码 颜色选择器 改变颜色格式 强制改变元素状态(方便查 ...

  9. js防堵塞载入

    js防堵塞载入 <script type="text/javascript"> function scriptDomElement (u) { var s = docu ...

  10. 聪明的kk

    聪明的kk 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描写叙述 聪明的"KK" 非洲某国展馆的设计灵感源于富有传奇色彩的沙漠中陡然起伏的沙丘.体现出本 ...