静态成员和实例成员哪个性能更优?

转载:C#编程语言详解(第2版) 

    类的成员或者是静态成员(static member),或者是实例成员(instance member)。一般来讲,可以理解为静态成员属于类,而实例成员属于对象(类的实例)。

如果域、方法、属性、事件、运算符和构造函数的声明中包含static修饰符,则将声明静态成员。此外,常量或类型声明将隐式地声明一个静态成员。静态成员具有以下特征:

— 当在形式为E.M的成员访问(参见7.5.4小节)中引用静态成员M时,E必须表示一个包含M的类型。如果E表示一个实例,则将发生编译时错误。

— 一个静态域只标识一个存储位置。无论对一个类创建了多少个实例,它的静态域都将只有一个副本。

— 静态函数成员(方法、属性、事件、运算符或构造函数)不会对具体的实例进行操作,在这类函数成员中引用this将发生编译时错误。

如果域、方法、属性、事件、索引器、构造函数或析构函数的声明中不包含static修饰符,则将声明实例成员(实例成员有时称为非静态成员)。实例成员具有以下特征:

— 当在形式为E.M的成员访问(参见7.5.4小节)中引用实例成员M时,E必须表示一个包含M的类型的实例。如果E表示一个类型,则将发生编译时错误。

— 类的每个实例都分别包含一组该类的所有实例域。

— 一个实例函数成员(方法、属性、索引器、实例构造函数或析构函数)作用于该类的给定实例,可以使用this访问该实例(参见7.5.7小节)。

下面的示例说明了访问静态成员和实例成员的规则:

class Test

{

  int x;

  static int y;

  void F() {

    x = 1;       //正确,与this.x = 1相同

    y = 1;       //正确,与Test.y = 1相同

  }

  static void G() {

    x = 1;       //错误,不能访问this.x

    y = 1;       //正确,与Test.y = 1相同

  }

  static void Main() {

    Test t = new Test();

    t.x = 1;    //正确

    t.y = 1;    //错误,不能通过实例访问静态成员

    Test.x = 1;  //错误,不能通过类型访问实例成员

    Test.y = 1;  //正确

  }

}

F方法显示了在实例函数成员中,简单名称(参见7.5.2小节)既可用于访问实例成员,也可用于访问静态成员。G方法显示了在静态函数成员中,通过简单名称访问实例成员将引发编译时错误。Main方法显示了在成员访问(参见7.5.4小节)中,实例成员必须通过实例进行访问,而静态成员则必须通过类型进行访问。

    自己也写过一点代码,今天重新复习,才明白,这两者的区别,可是还没有搞清楚,两都性能有什么区别?
按自己想法,静态成员应该用在经常使用的代码中,如SqlHelper代码中,静态成员使用很多.实例函数实用于增加、删除等不常用代码。
    请路过的高手指点下。

posted @ 2007-12-03 23:19  编程入门  阅读(668)  评论(1编辑  收藏  举报