静态成员和实例成员哪个性能更优?
转载: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代码中,静态成员使用很多.实例函数实用于增加、删除等不常用代码。
请路过的高手指点下。