深入C#实例成员和静态成员详解

发布时间:2020-10-28编辑:脚本学堂
本文介绍下,c#中有关实例成员与静态成员的相关知识,有需要的朋友,可以参考下。

C#类的成员分为两种类型,如下表所示
类型  说明
数据  存储对象所需数据的成员,函数可以使用这些数据执行他们的工作
函数  类中的代码块,函数成员允许类执行它的工作

数据成员分组为实例成员和静态成员
1、实例成员,默认情况下,所有成员都是实例成员,除非他们是常理或者有前缀static关键字。
例如:
 

复制代码 代码示例:
public int ID;
public string FirstName;
public string LastName;
public string Email;

只能通过类的实例访问实例成员,并且类的每个实例(对象)都有自己的数据副本。
例如:
 

复制代码 代码示例:

public class Contact 

 public int ID { get; set; } 
 public string Name { get; set; } 
 public string City { get; set; } 

Contact c1 = new Contact(); 
c1.ID = 10; 
c1.Name = "China"; 
c1.City = "Hefei"; 
Contact c2 = new Contact(); 
c2.ID = 100; 
c2.Name = "America"; 
c2.City = "NewYork"; 
 
string s1 = string.Format("c1.ID={0},c1.Name={1},c1.City={2}", c1.ID, c1.Name, c1.City); 
string s2 = string.Format("c2.ID={0},c2.Name={1},c2.City={2}", c2.ID, c2.Name, c2.City); 
MessageBox.Show(s1 + "nr" + s2); 

2、静态成员
静态数据成员属于类,而不是属于类的每个实例,使用static关键定义静态成员,如:
 

复制代码 代码示例:
public class Contact 

<span style="white-space:pre">  </span>public static int count; 
public int ID { get; set; } 
public string Name { get; set; } 
public string City { get; set; } 

不可以通过类的实例来访问count,需要通过类访问该变量,如:Contact.count=4;

C#静态类和静态类成员用于创建无需创建类的实例就能够访问的数据和函数。静态类成员可用于分离独立于任何对象标识的数据和行为:无论对象发生什么更改,这些数据和函数都不会随之变化。当类中没有依赖对象标识的数据或行为时,就可以使用静态类。

静态类:
类可以声明为static的,以指示它仅包含静态成员。不能使用 new 关键字创建静态类的实例。静态类在加载包含该类的程序或命名空间时由 .NET Framework 公共语言运行库 (CLR) 自动加载。

使用静态类来包含不与特定对象关联的方法。例如,创建一组不操作实例数据并且不与代码中的特定对象关联的方法是很常见的要求。您应该使用静态类来包含那些方法。

静态类的主要功能如下:

1、它们仅包含静态成员。

2、它们不能被实例化。

3、它们是密封的。

4、它们不能包含实例构造函数(C# 编程指南)。

因此创建静态类与创建仅包含静态成员和私有构造函数的类大致一样。私有构造函数阻止类被实例化。

使用静态类的优点在于,编译器能够执行检查以确保不致偶然地添加实例成员。编译器将保证不会创建此类的实利。

静态类是密封的,因此不可被继承。静态类不能包含构造函数,但仍可声明静态构造函数以分配初始值或设置某个静态状态。

何时使用静态类

假设有一个类 CompanyInfo,它包含用于获取有关公司名称和地址信息的下列方法。

复制代码 代码示例:

class CompanyInfo 
 

 
public string GetCompanyName() { return "CompanyName"; } 
 
public string GetCompanyAddress() { return "CompanyAddress"; } 
 
//... 
 

不需要将这些方法附加到该类的具体实例。因此,您可以将它声明为静态类,而不是创建此类的不必要实例,如下所示:

复制代码 代码示例:

static class CompanyInfo 
 

 
public static string GetCompanyName() {  
return "CompanyName"; } 
 
public static string GetCompanyAddress() {  
return "CompanyAddress"; } 
 
//... 
 

使用静态类作为不与特定对象关联的方法的组织单元。此外,静态类能够使您的实现更简单、迅速,因为您不必创建对象就能调用其方法。以一种有意义的方式组织类内部的方法(例如 System 命名空间中的 Math 类的方法)是很有用的。静态成员

即使没有创建类的实例,也可以调用该类中的静态方法、字段、属性或事件。如果创建了该类的任何实例,不能使用实例来访问静态成员。只存在静态字段和事件的一个副本,静态方法和属性只能访问静态字段和静态事件。静态成员通常用于表示不会随对象状态而变化的数据或计算;例如,数学库可能包含用于计算正弦和余弦的静态方法。

在成员的返回类型之前使用 static 关键字来声明静态类成员,例如:

复制代码 代码示例:

public class Automobile 
 

 
public static int NumberOfWheels = 4; 
 
public static int SizeOfGasTank 
 

 
get
 

 
return 15; 
 

 

 
public static void Drive() { } 
 
public static event EventType RunOutOfGas; 
//other non-static fields and properties... 
 

静态成员在第一次被访问之前并且在任何静态构造函数(如调用的话)之前初始化。若要访问静态类成员,应使用类名而不是变量名来指定该成员的位置。例如:

复制代码 代码示例:

Automobile.Drive(); 
 
int i = Automobile.NumberOfWheels;

C#静态类和静态类成员的内容就介绍这些吧,希望对大家掌握C#静态类和静态类成员有所帮助。