C#静态类和静态成员
1. 静态类
1.1 简介
- 静态类和类成员用于创建无需创建类的实例就能够访问的数据和函数。
- 静态类成员可用于分离独立于任何对象标识的数据和行为:无论对象发生什么更改,这些数据和函数都不会随之变化。
- 当类中没有依赖对象标识的数据或行为时,就可以使用静态类。
1.2 特点
- 它们仅包含静态成员。
- 它们不能被实例化。
- 它们是密封的。
- 它们不能包含实例构造函数(C# 编程指南)。
1.3 其他
- 静态类是密封的,因此不可被继承。
- 静态类不能包含构造函数,但仍可声明静态构造函数以分配初始值或设置某个静态状态。
1.4 实例
staticclass CompanyInfo
{
publicstaticstring GetCompanyName() { return"CompanyName"; }
publicstaticstring GetCompanyAddress() { return"CompanyAddress"; }
//...
}
2. 静态类成员
2.1 简介
- 在成员的返回类型之前使用 static 关键字来声明静态类成员
- 即使没有创建类的实例,也可以调用该类中的静态方法、字段、属性或事件。
2.2 特点
- 如果创建了该类的任何实例,不能使用实例来访问静态成员。
- 只存在静态字段和事件的一个副本,静态方法和属性只能访问静态字段和静态事件。
- 静态成员通常用于表示不会随对象状态而变化的数据或计算;例如,数学库可能包含用于计算正弦和余弦的静态方法。
- 静态成员在第一次被访问之前并且在任何静态构造函数(如调用的话)之前初始化。
- 若要访问静态类成员,应使用类名而不是变量名来指定该成员的位置。
2.3 实例

publicclass Automobile
{
publicstaticint NumberOfWheels =4;
publicstaticint SizeOfGasTank
{
get
{
return15;
}
}
publicstaticvoid Drive() { }
publicstaticevent EventType RunOutOfGas; //other non-static fields and properties...
}

使用:
Automobile.Drive();
int i = Automobile.NumberOfWheels;
3. 一个使用静态类和静态类成员的实例
下面是一个静态类的示例,它包含两个在摄氏温度和华氏温度之间执行来回转换的方法:

publicstaticclass TemperatureConverter
{
publicstaticdouble CelsiusToFahrenheit(string temperatureCelsius)
{
// Convert argument to double for calculations.
double celsius = System.Double.Parse(temperatureCelsius); // Convert Celsius to Fahrenheit.
double fahrenheit = (celsius *9/5) +32; return fahrenheit;
} publicstaticdouble FahrenheitToCelsius(string temperatureFahrenheit)
{
// Convert argument to double for calculations.
double fahrenheit = System.Double.Parse(temperatureFahrenheit); // Convert Fahrenheit to Celsius.
double celsius = (fahrenheit -32) *5/9; return celsius;
}
} class TestTemperatureConverter
{
staticvoid Main()
{
System.Console.WriteLine("Please select the convertor direction");
System.Console.WriteLine("1. From Celsius to Fahrenheit.");
System.Console.WriteLine("2. From Fahrenheit to Celsius.");
System.Console.Write(":"); string selection = System.Console.ReadLine();
double F, C =0; switch (selection)
{
case"1":
System.Console.Write("Please enter the Celsius temperature: ");
F = TemperatureConverter.CelsiusToFahrenheit(System.Console.ReadLine());
System.Console.WriteLine("Temperature in Fahrenheit: {0:F2}", F);
break; case"2":
System.Console.Write("Please enter the Fahrenheit temperature: ");
C = TemperatureConverter.FahrenheitToCelsius(System.Console.ReadLine());
System.Console.WriteLine("Temperature in Celsius: {0:F2}", C);
break; default:
System.Console.WriteLine("Please select a convertor.");
break;
}
}
}

输入
2
98.6
输出:
Please enter the Fahrenheit temperature: 98.6
Temperature in Celsius: 37.00
http://www.cnblogs.com/mycom/archive/2010/03/10/1682519.html
http://www.cnblogs.com/jiapengliang2005/articles/1671991.html
http://www.cnblogs.com/lovexinger/archive/2010/04/17/1714079.html
http://www.cnblogs.com/lovexinger/archive/2010/04/17/1714082.html
C#静态类和静态成员的更多相关文章
- C# 静态类与非静态类、静态成员的区别
静态类 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量.在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例 ...
- 深入理解C# 静态类与非静态类、静态成员的区别
静态类 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量.在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例 ...
- C#基础(七)——静态类与非静态类、静态成员的区别
静态类 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量.在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例 ...
- C# 静态类与非静态类、静态成员的区别分析
静态类静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量.在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例化 ...
- C#面向对象2 静态类、静态成员的理解
理解:静态成员属于类所有,为各个类的实例所公用,与实例无关,需要全局共享的属性或者方法定义成静态的 C#静态成员: 1.静态成员属于类所有,故用类名调用,非静态成员属于类的实例所有,用实例名调用 ...
- 深入理解C# 静态类与非静态类、静态成员的区别 [转载]
静态类 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量.在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例 ...
- C#静态类、静态成员、静态方法
一.作用 静态类和非静态类重要的区别是在于静态类不能被实例化,也就是说不能使用 new 关键字创建静态类类型的变量,防止程序员写代码来实例化该静态类或者在类的内部声明任何实例字段或方法. 用于存放不 ...
- 深入理解 静态类和静态字段(C# 基础)
序言 以前,总是被提醒,在编程过程中尽量少用静态变量,数据丢失什么的,今天有空,禁不住对静态变量的强烈好奇,跟我一起了解下静态家族的内幕吧. 静态类 定义 静态类与非静态类的重要区别在于静态类不能实例 ...
- C#中的静态成员和非静态成员
C#的类中可以包含两种方法:C#静态方法与非静态方法.那么他们的定义有什么不同呢?他们在使用上会有什么不同呢? 让我们来看看最直观的差别:使用了static 修饰符的方法为静态方法,反之则是非静态方法 ...
随机推荐
- AngularJS开发经验(转)
AngularJS是为了克服HTML在构建应用上的不足而设计的.HTML是一门很好的为静态文本展示设计的声明式语言,但要构建WEB应用的话它就显得乏力了.所以我做了一些工作(你也可以觉得是小花招)来让 ...
- JDE修改Grid列样式
Set Grid Color :to change the background color of a cell, row, column, or the entire control. Set Gr ...
- 二模 (2) day2
第一题: 题目描述: 在一个长方形框子里,最多有 N(0≤N≤6)个相异的点.在其中任何-个点上放一个很小的油滴,那么这个油滴会一直扩展,直到接触到其他油滴或者框子的边界.必须等一个油滴扩展完毕才能放 ...
- C#解析复杂的Json成Dictionary<key,value>并保存到数据库(多方法解析Json 四)
准备工作: 1.添加引用System.Web.Extensions, 2..net3.5+版本都有,如果VS2010找不到,在这个文件夹找:C:\Program Files\Reference Ass ...
- 前端相关技术之ajax相关
AJAX技术点 async javascript and xml:异步的js和xml,用js异步去操作xml ajax用于数据交互,不能操作DOM –节省用户操作,时间,提高用户体验,减少数据请求 – ...
- warning malformed '#pragma pack(push[, id], n)' - ignored
bmp.c:8: warning: malformed '#pragma pack(push[, id], <n>)' - ignored bmp.c:33: warning: #prag ...
- html圆角提示效果
<fieldset> <legend>标题</legend> 内容 </fieldset>
- Hibernate 的配置文件
Hibernate 配置文件 •Hibernate 配置文件主要用于配置数据库连接和 Hibernate 运行时所需的各种属性 •每个 Hibernate 配置文件对应一个 Configuration ...
- Section 1.4 Arithmetic Progressions
寒假的第一天,终于有空再写题目了,专心备战了.本想拿usaco上的题目练手热身,结果被磕住了T T.其实这是一道穷举题,一开始我在穷举a,b,但是怎么优化就是过不了Test 8,后来参照NOCOW上的 ...
- Hibernate4 No Session found for current thread原因
Hibernate4 与 spring3 集成之后, 如果在取得session 的地方使用了getCurrentSession, 可能会报一个错:“No Session found for curre ...