.Net 重修笔记

博客园 首页 新随笔 联系 订阅 管理

 重新学习C#。

书目:<<Perfecssional C# 2008>>

作者:一大堆


CLR开始前书中前言介绍不少没听过的东西。

先说说C#和.Net诞生的背景

Windows操作系统从Win3.1(1992年)开始一直到Win Server2008都是用的相似的Win API。换句话说,一个强大框架可以支撑自身不停地丰满枝叶,而不用彻头彻尾的取代。COM(Component Object Model)源自OLE(Object Linking and Embedding)。它可以使大量不同类型的OFFICE文档之间连接起来,进行交流。微软的系统开发时主要考虑的是逆向兼容的问题,因为这些年来无数的第三方软件开发商为Windows开发出了无数的软件。如果微软突然引进一个新的技术进来,兼容性问题会导致所有程序的崩溃!

尽管逆向兼容问题对于微软而言是个很严重的问题,其缺点也很明显 - 每次扩展Windows时所加入的新技术会使这个逆向的框架更加复杂,但不意味着微软会放弃使用。因为树太大了。。已经很难砍到了。这颗大树上的枝叶越多,将来逆向寻求兼容时就要考虑更多的复杂因素。微软也是郁闷啊。。。

微软需要一个新的开始时,C#和.NET框架诞生了。.Net是一个框架 - 一个API - 为了Windows平台的编程而生。C#是一个新的语言,为了更好的为.Net框架服务而生,同时它融入了近20年来的先进技术同时也将Object-oriented(面向对象)概念贯彻到底。

要声明一点的是,逆向兼容问题并没有消失,现有应用依然像过去一样工作着。.Net只是被设计成了一个能够兼容并支持现有软件的框架。目前,Windows的软件组件之间交流几乎都是通过COM来完成的。.Net具有现有COM组件的Wapper aoround(壳儿),因此.Net的组件才能与COM组件交流。

.Net的优势有:

  • OO programming - .Net框架和C#从一开始就是基于OO概念的。
  • Good Class Library(类库)- 基础的类库是由一帮很强的变态程序员呕心沥血吐胆汁开发出来的,不得不说是简单又强大。
  • Language indepdendace (语言独立) - VB .Net, C#, J#, managed C++ - 都被编译成普通的Intermediate Language(中级语言). 高级到中级再到低级。。这里后面应该会进一步讲。低级语言-中级语言-高级语言又是一个大的课题。
  • 对网页更好的支持 - ASP效率太低了,因为它是interpreted scripting languages(解释型脚本语言),并且不是OO。可.Net有ASP.Net - 高级语言,容易上手,直观好用还可以用C#, VB.NET来写,牛逼大发了。
  • 高效率的数据访问 - 一组.Net的组件,总称ADO.net,提供了高效访问(Relational database)关系数据库和不同数据源(data sources)的方法。同时组建也可以用来访问文件系统,路径等。一般,还支持XML,因此可以让你改变从非windos平台过来的数据。
  • 代码共享 - 现在.Net可以用assembly(程序集)来代替传统的DLL。不同版本间的程序集可以一起工作,互相支持。所以牛逼!
  • 更安全 - 每个程序集都内建了一个安全信息,可以支持谁或者什么样的用户或进程,访问了哪个方法,哪个类!这可以很容易就使你知道哪些程序集在你(Deploy)部署时候被用到了
  • Zero-impact(零影响)安装 - 程序集分为两种- 共享 和 私有。共享的数据集是通用库,所有软件都可以访问。私有的只能被特定的软件访问。一个私有的程序集是完全self-contained(独立的),因此安装过程很简单。不需要注册表项(registry entries),特定文件都是直接拷贝到特定文件夹内的。
  • 支持web services(网络服务)
  • 牛逼IDE - VS
  • C#牛逼 - 。。

 好了下面走入正题,先看看3.5都多出了什么东西。

 1. Implicitly Typed Variables (隐式变量)

 C#2008允许你定义一个变量并由编译器暗中来决定它的类型。LINQ会使用这种性能来使创建出的Query(查询)工作。通常我们用var这个关键字来定义:

var x = 5

当你用这种语句时, 编译器会自己通过5这个值来分辨出它的类型。也就意味着,在这种情况下,语句最终会像你期望的一样:

int x = 5

 2. Automatically Implemented Properties(自动应用的属性)

 现今在C#2008中定义属性更加简单了,之前你你需要诸如此类的步奏:

 

 1 private int _myItem;
 2 
 3 public int MyItem
 4 {
 5     get {
 6        return myItem
 7     }
 8     
 9     set {
10        myItem = value;
11     }
12 }

 现在编译器会带你完成这些工作。你现在只用使用自动应用属性的快捷方式就可以了:

public in MyProperty {getset;}

 这种syntax(语法)产生的结果与之前那个臭长的例子是一样的。

 3. Object and Collection Initializers(目标和集合初始化)

 C#08现在允许在初始化object's properties的过程中,你指定一个值给object。比如你现在有下面这段代码:

public class MyStructure
{
    
public int MyProperty1 { getset;}
    
public int MyProperty2 { getset;}
}

在C#08里,你可以这样初始化MyStructure这个object:

MyStructure myStructure = new MyStructure() {
   MyProperty1 
= 5, MyProperty2 = 10;
}

 这样就可以让同时你declare(声明)一个合集中更多item(项)了:

List<int> myInts = new List<int>() {510152025};

 在这种情况下,实际上所有的数字都被加到了myInts这个list中,就像你自己挨个使用Add()方法添加是一个道理。但能在初始化时就赋值,这就省去了很多时间与步奏。这里我有一个疑问:如果没有default的add()或set method,那么Object&Collection Initializers是否还能用?

 Built-In ASP.NET AJAX Support(内建了对AJAX的支持)

 以前.net 2.0的时候都要安装附加程序才能很好的支持AJAX, 现在3.5里已经内置了。

 .NET Language Integrated Query Framework(LINQ)

 很牛逼的一个东东,后面会讲到。

 

 从明天开始就正式看第一章了~~ 小激动!

 

【Perfecssional C# 2008】PartI - Chapter 1 - .Net Architecture (.Net 构架) >>

 

 

posted on 2009-05-01 18:39  佐贝莎  阅读(309)  评论(0编辑  收藏  举报