四、杂项技术,以及C#语言的未来发展

。属性访问器的保护级别
。命名空间别名限定符
。Pragma指示符
。Conditional特性类
。定长buffer
。C#3.0与未来发展


属性访问器保护级别的变化
。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后面眼上具体的警告代码号,从而来禁止或者恢复特定的警告信息。
。#pragma是一个编译预处理功能,不影响任何代码运行机制。


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引入定长buffer来使得我们可以在结构里声明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#语言的发展越来越多地体现融合“设计模式+库”的思想。“语言的发展就是库的发展!”


 

posted @ 2010-05-28 16:46  teacherzj  阅读(179)  评论(0)    收藏  举报