前言

借着看这本书的机会,好好系统学习一下C#3.0和.net3.5。
C#3.0是一门面向对象的编程语言,具有多用途和类型安全等特征。为实现开发和学习的高效性,她在语言的简单,易表达,以及可编程性上做了很大努力。使得新人能够很快入门,开发者能够快速开发出程序。但这些并不是损害语言的功能为前提的。
正文
1.C#的面向对象性(Object Orientation)
C#同JAVA一样是面向对象的语言,具有封装(encapsulation),多态(polymorphism),继承(polymorphism)的特性。但是她也有着区别其它面向对象语言的特点。
a.统一的类型系统(Unified type system)
 就是说所有的类型(Type)都是共享一个通用基础类型(Common base Type). 无论值类型或引用类型就是继承自System.object. 而object所拥有的方法所有类型都可以使用,如:ToString(),Equals()等。
b.类(Class)和接口(Interface)
 在传统的面向对象语言中只有类这一种表现形式,而在C#(Java)中却有了接口(Interface),接口是一种只有定义没有实现的类,由于C#是一种单类继承语言,所以接口就显得格外有用,一个类可以继承多个接口,
弥补了单类继承带来的不足。(单类继承应该是语言设计者有意这么做的,大概是为了保证类的纯净)。
c.属性(Properties),方法(Methods)和事件(Events)
传统的面象对象语言只有Methods,而C#增加了属性和方法,这些特性丰富了我们编程,特别是做一些组件和控件开发的时候就显得特别有用。
2.C#的类型安全(Type Safety)
 C#是一门强类型语言,也就是说你定义了Int参数的方法,不用用float参数去调用。编译器(Complier)会去强制做类型检查,不匹配的类型是会抛出异常(Exception)并提示错误,变量的定义也是如此。随着VS的IDE功能不断强大,已经提供了智能感知(IntelliSense)的功能,让我们提前排除这些错误。
另外在c#3.0中出现了Var,但这也是一种强类型,编译器会根据上下文,进行类型推断出她的类型。
3..net的内存管理(Memory Management)
   C#运行在一个运行时(Common Lanague Runtime)上,这个CLR具有强大的功能,她帮我们管理着程序所用的内存。她有着内存管理,垃圾回收,线程管理等功能。这样就方便了我们编程,不需要想C++那样需要自己写大量的代码来释放资源,所以理论上时不会出现内存泄漏的情况的。
但是我个人觉最好不要偷懒,象一些昂贵的资源还是手动的释放比价好,比如:对打印机的调用,还有多线程管理.防范式编程还是需要的。
CLR的垃圾回收一般是有两个线程来运作的,对于普通的对象的回收器就是直接覆盖内存,而对比较昂贵的资源暂时无法回收的,就会放到另外一个线程上,等到安全点的来临时进行回收。这方面可以到网上找找介绍资料。
4.C#的多平台支撑(Platfrom Support)
C#和CLR都是符合ECMA的标准。 C#的代码通常是运行在windows平台上,但是却不妨碍她运行在其它的系统上如:Linux, Solaris, Mac OS X。.net framework为我们提供了统一的编程模型,所以我们只要针对.net编程,而不需要考虑系统的差异性。
C#的代码也可以运行在Silverlight这个宿主(host)上,她是微软新推出的一项技术。
4.C#和通用语言运行时(CLR)的关系
 C#是.运行在CLR上的众多语言之一,她依赖着.net提供的内存管理等服务。
5.通用语言进行时(CLR)和.net Framework的关系
.net framework 是由CLR和一大堆,一系列的类组成。这个巨大的类库又分成了核心类(Core libraries)和应用类(applied libraries),应用类是依靠核心类的。
如图:(图片来自书)
用.net上任何语言写的代码都会被编译成中间语言(Intermediate Language),即IL。这些中间语言以及他们的配置信息(type information)和原数据(MetaData)都会一起打包成可执行文件(exe)或程序集文件(dll),放在CLR上执行。
当CLR要执行代码时,首先是加载程序集(Assembly),通过CLR的即时编译器(Just-In-Time)把IL转换成适合CPU特点运行的机器码.
6.C#3.0给我们带来了那些新特性?
C#3.0新特性的重中之重就是Linq(Language Integrated Query capabilities)了,她的前身是Comega,主要设计者是Erik Meijer,她和Omega有相似之处。
Linq的语法特征跟SQL语法达到95%的相似,但用法以及语意却有出入,编译器能够对她做出很好的语法检查。
Linq可以对本地的集合(Collections),和远端的数据库(DB)和XML,进行查询分析。
C#3.0还有如下新特性。
a.       Lambda 表达式 (Lambda Expressions)
例如:
Func<int,int> square = x => x * x;
Console.WriteLine (square(3));         // 9
b.       扩展方法(Extensions Method)
例如:
string[] names = { "Tom", "Dick", "Harry" };
IEnumerable<string> filteredNames = names.Where (n => n.Length >= 4);
例子有点问题,体现不了扩展方法的特性。
比如:Int类型,我们想在它里面加自己的方法myMethod(),以后调用Int类型的时候,智能提示就是出现myMethod(),就可以用到这个。
c.        隐式类型变量(Implicitly typed local variables)
例如:
var filteredNames = names.Where (n => n.Length == 4);
也就是Var。
d.推算分析(Query comprehension)
这个是我的叫法,她是Linq的语法,如:from,select ,in,group by 之类的。
例如:
var filteredNames = from n in names where n.Length >= 4 select n;
 
e.匿名类(Anonymous types)
就是我们无需象传统的那样定义一个类,象定义一个临时变量定义一个有结构的类。
她只是为方便我们临时使用。以后会细说。
例如:
var query = from n in names where n.Length >= 4
            select new {
                         Name = n,
                         Length = n.Length
                       };
var dude = new { Name = "Bob", Age = 20 };
 
f.对象初始化器(Object initializers)
这个是方便我定义对象时,省去一大堆的构造器。同时也方便了我们实例化。
例如:
Bunny b1 = new Bunny { Name="Bo", LikesCarrots=true, LikesHumans=false };
 
g.隐式类型数组(Implicitly typed arrays)
这个跟隐式类型变量定义差不多,只是她是数组。
例如:
var dudes = new[]
{
   new { Name = "Bob", Age = 20 },
   new { Name = "Rob", Age = 30 }
};
 
h.自动属性(Automatic properties)
又一个语法糖(syntactic sugar),为了我们这些代码工人省力而做的。
例如:
public class Stock
{
 // C# 3.0:
              public decimal X { get; set; }
 
 // C# 2.0:
              private decimal y;
              public decimal Y
              {
                get { return y; }
                set { y = value; }
              }
}
I.部分方法(Partial methods)
这用处就是我们一个方法里可能需要调用另外一个未定义或定义好的方法,她可能暂时用不上。部分方法就是为她设计的。
例如:
partial class PaymentForm
{
partial void ValidatePayment (decimal amount);//部分方法的申明
}
 ///部分方法的定义
partial class PaymentForm
{
partial void ValidatePayment (decimal amount)
{
if (amount > 100)
}
}
///调用
Static void Main()
{
PaymentForm form=new PaymentFrom();
Form.ValidatePayMent(5.3);///如果没有定义上面的方法,也不会报错。
}
j.表达树(Expression trees)
这个不多说了,以后会说到。
例如:
string[] names = { "Tom", "Dick", "Harry" };
IEnumerable<string> filteredNames =                // Include only names
 Enumerable.Where (names, n => n.Length >= 4);    // of >= 4 characters.
以上都c#3.0新出的特性,行内都说是语法糖。呵呵!以后的文章会详细说这些东西的。
后记
本人学习中,错误难免,敬请指教,谢谢!

转载于:https://blog.51cto.com/19449/154457

《C#3.0 in a Nutshell,3rd Edition》之C#3.0和.net3.5基本介绍篇相关推荐

  1. 《C#3.0 in a Nutshell ,3rd Edition》之序言篇

    前言 最近在图书馆看到了<C#3.0核心技术>这本书,看了一下觉得挺不错的,C#3.0的技术从基础语法到新特性到涉及到了,是一部学习C#3.0的好书,本想从网上下载电子版却没找不到,却但看 ...

  2. Python Cookbook 3rd Edition Documentation

    Python Cookbook 3rd Edition Documentation 文章目录 第一章:数据结构和算法 1.1 解压序列赋值给多个变量 问题 解决方案 讨论 1.2 解压可迭代对象赋值给 ...

  3. Real-time Rendering (3rd edition)学习笔记第4章

    目录 第4章 变换(Transforms) 4.1 基本变换(Basic Transforms) 4.1.1 平移(Translation) 4.1.2 旋转(Rotation) 4.1.3 缩放(S ...

  4. Contents of Programming ASP.NET 3rd Edition

    Programming ASP.NET 3rd Edition的目录初稿,大家可以先睹为快: 前言 第1章 ASP.NET 2.0 第2章 Visual Studio 2005 第3章 控件:基本概念 ...

  5. Delphi7 Lite Edition 7.3.4.0 [2010-11-20]

    Delphi7 Lite Edition 7.3.4.0 [2010-11-20] 序 [Borland是一家令人景仰的公司,當值Borland已成往事之際,謹以此產品獻給曾經的Borland,紀念已 ...

  6. Practical Python and OpenCV 3rd Edition读书笔记_Chapter8_Smoothing and Blurring平滑与模糊_思维导图

    <Practical Python and OpenCV 3rd Edition>真的是一本非常棒的入门书籍. 它也很薄,只有166页,虽然是纯英文的,如果静下心来认真看一两天就可以读完. ...

  7. practical python and opencv_Practical Python and OpenCV + Case Studies, 3rd Edition

    Practical Python and OpenCV + Case Studies, 3rd Edition By 作者: Dr. Adrian Rosebrock Publication Date ...

  8. 【C# 7.0 in a Nutshell】第3章 在C#中创建类型——类

    类 (Class) 是最常用的引用类型.最简单的类声明如下: class YourClassName {} 更复杂的类有如下选项: class关键字前面:属性(attributes)和类修饰符(cla ...

  9. 【C# 7.0 in a Nutshell】第4章 C#的高级特性——委托

    委托是一个知道如何调用方法的对象. 委托类型(delegate type)定义委托实例(delegate instances)可以调用的方法类型.具体来说,它定义了方法的返回类型和参数类型.下面定义了 ...

最新文章

  1. Android中/system/build.prop文件解读
  2. ES查看segment大小
  3. numpy delete
  4. 用户操作-用户添加操作代码实现
  5. mysql打开sql语句日志
  6. 学习笔记day5:inline inline-block block区别
  7. 将Maven项目发布到Nexus私服
  8. android 申请sdcard权限_Android sdcard读写权限问题之中的一个
  9. 基于Scrapy框架的Python新闻爬虫
  10. 大话程序猿眼里的高并发架构
  11. BZOJ5221[Lydsy2017省队十连测] 偏题
  12. Navicat Premium 12.1.21 最新版激活工具及方法
  13. python 100days github_GitHub - 1042970366/Python-100-Days: Python - 100天从新手到大师
  14. 名帖33 赵孟頫 隶书《千字文》
  15. 优化方法之黄金分割法(Python实现)
  16. 【MicroPython ESP32】ssd1306驱动0.96“I2C屏幕cube3D图形显示
  17. opencv立方体的画法_美术生干货,最详细的立方体透视变化及画法讲解,不看后悔!...
  18. ENSP实验超详细步骤(内涵小实验一个)
  19. LCD1602的使用及显示
  20. 带你简单的了解和学习一下STM32f1精英版(入门级)

热门文章

  1. 第二篇 python基础知识总结:数据、运算符
  2. JavaScript中call和apply方法
  3. 修改Eclipse自动换行长度
  4. 萨蒂扬软件技术(南京)研发中心”落户高新区
  5. vuejs怎么在服务器上发布部署
  6. 第五周-第07章节-Python3.5-内置模块详解之OS模块
  7. NOIP模拟赛10 题解
  8. Flask 在 Debug 模式下初始化2次
  9. UWP 响应键盘组合快捷键
  10. Eclipse中自动添加注释