惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
罗磊的独立博客
小众软件
小众软件
T
Tailwind CSS Blog
宝玉的分享
宝玉的分享
博客园_首页
N
Netflix TechBlog - Medium
B
Blog
Recent Announcements
Recent Announcements
Y
Y Combinator Blog
Blog — PlanetScale
Blog — PlanetScale
L
LangChain Blog
F
Fortinet All Blogs
The GitHub Blog
The GitHub Blog
Stack Overflow Blog
Stack Overflow Blog
C
Check Point Blog
Last Week in AI
Last Week in AI
Jina AI
Jina AI
V
V2EX
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 叶小钗
博客园 - 【当耐特】

博客园 - lae

[转]程序员应知: 海量数据如何分析 [转]Web开发者必备的12款超赞jQuery插件 NOSql数据库特性对比 NHibernate3新特性初尝 - lae - 博客园 微软回答“关于数据的10个问题” SubSonic 3.0新特性 System.Data.OracleClient调用带blob等大字段类型参数的存储过程 SubSonic入门(下) SubSonic入门(上) SubSonic的controller类的FetchByID()错误解决办法 - lae - 博客园 ASP.NET中文版开发建议 - lae - 博客园 spl工作在remoting方式下的问题总结 - lae - 博客园 [转载]世界杯期间制定给女友或老婆的十二条准则 - lae - 博客园 sql server 2000关于日期的查询 - lae C# 2.0 泛型编程(选择自 shoutor 的 Blog ) C# 2.0 匿名方法、迭代器(选择自 shoutor 的 Blog ) C# 2.0 局部类型、空属类型、静态类(选择自 shoutor 的 Blog) 关于在vs.net中的.htm里面添加连接,就会出现下载.ASPX文件的提示? Microsoft Enterprise Library June 2005--Data Access Application Block访问Oracle数据库(1)
C# 2.0 杂项技术,以及C#语言的未来发展(选择自 shoutor 的 ...
lae · 2006-02-10 · via 博客园 - lae

 

属性访问器保护级别的变化

C# 2.0 允许我们对一个属性的get和set访问器使用不同的访问级别修饰符:

class Customer
{
   private string name;
   ...
   public string Name
   {
      get{return this.name;}
      internal set(this.name=value;}
   }
   ...
}

一些注意点

属性访问器(get或set)上应用的访问修饰符必须“小于”属性上应用的访问修饰符;“小于”的意思即“更严格”,例如protected小于public。

只能在一个属性访问器(get或set)上指定比属性上的访问修饰符“更小”的访问修饰符。

对于接口中属性的声明,不能给属性访问器(get或set)指定任何访问修饰符,只能默认为public。

属性访问器保护级别的变化规则完全适用于C#的索引器。

---------------------------------------------

名称空间别名限定符的引入

C# 2.0 允许我们使命名空间别名限定符(::)来避免不同命名空间中类型名称冲突的问题:

using SC = System.Collections;
using ZC = Zhucheng.Collections;
class Program
{
   static void main()
   {
       ZC::ArrayList list = new ZC::ArrayList();
       ...
   }
}

一些注意点

当使用命名空间别名限定符(::)时,如果ZC:ArrayList,编译器可以确保这是一个只适用于“名称空间别名”的限制符,不会辨析为其他类型、或者成员限定符(.)。

关键字global可以放在命名空间别名限定符(::)的左边,它使得编译器只去搜索那些所有的命名空间,而不会去搜索其他的类型、或成员。

尽可能地使用命名空间别名限定符(::),而减少使用点号(.)这样的通配限定符。

---------------------------------------------

pragma指示符的引入

C# 2.0 允许我们使用命名空间别名限定符(::)来避免不同命名空间中类型名称冲突的问题:

class program
{
   [Obsolete]
   static void Foo(){...}
   static void Main()
   {
      #pragma warning disable 612
      Foo();
      #pragma warning restore 612
   }
}

几个注意点

目前pragma指示符只支持#pragma warning

#pragma warning disable 可以禁止掉任何编译器警告信息。

#pragma warning restore 可以恢复被disable掉的任何编译器警告信息。

可以在disable和restore后面跟上具体的警告代码号,从而来禁止或者恢复特定的警告信息。

#prama是一个编译预处理功能,不影响任何代码运行机制。

---------------------------------------------

Conditional特性类的引入

C# 2.0 允许我们使用Conditional特性类来告诉编译器根据“特定的预定义指示符条件”来在类上应用特性。

#define DEBUG
using System;
using System.Diagnostics;

[Conditional("DEBUG")]
public class TestAttribute : Attribute{}

[Test]
class MyClass{}

几个注意点

如果定义了条件指示符,如#define DEBUG,那么编译器将在MyClass类上应用TestAttribute特性。

如果没有定义条件指示符,如#undef DEBUG,MyClass类照样可以正常使用,但是其上将不在应用TestAttribute特性。

注意区别C# 2.0 中的Conditional特性类和C# 1.0中的Conditional特性方法。

定长buffer的引入

C# 2.0 引入定长来使得我们可以在结构里声明C风格的数组,从而更加方便地实现托管代码和非托管代码的互操作:

unsafe struct MyClass
{
   public fixed int x[5];
   public fixed int y[10];
   public fixed int z[100];
}

几个注意点

定长buffer只能使用在unsafe代码的上下文中,不可以在非unsafe的代码中使用。

使用定长buffer所定义的字段在结构类型的实例对象中将按照它们的声明顺序来进行内存布局。

注意区别unsafe代码中的定长buffer和我们通常使用的托管数组。

定长buffer主要应用在托管代码和非托管代码互操作的情况,除此之外,我们一般使用托管数组。

---------------------------------------------

C# 3.0 与未来发展

C# 2.0 的核心机制在于泛行编程的引入,它赋予了类型参数式多态的能力,将对今后的C#代码构造有重要影响。

研发中的C# 3.0 将XML、SQL两中数据处理技术引入到C#这样的强类型语言中,极大地丰富了C#语言的数据处理能力,是一个极具远见的创新。

C#语言的发展越来越多体现融合“设计模式+库”的思想,“语言的发展就是库的发展”。