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 修饰符的方法为静态方法,反之则是非静态方法 ...
随机推荐
- ajax异步加载小例子....(通俗易懂)
web.html(用户端): <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- SSL证书请求文件(CSR)生成指南 - Tomcat
SSL证书请求文件(CSR)生成指南 - Tomcat http://www.zhenssl.com/support/CSRgen/tomcat_CSR.htm 重要注意事项 An Importa ...
- mybatis 语句共享
在mybatis mapping文件中,有些情况下有些语句需要共享给其他sql语句使用. 在网上搜了一下没有结果. 自己动手做了一个单元测试. 示例如下: 比如我在sysuser.xml 中有如下语句 ...
- 使用jvisualvm.exe 的Btrace插件监控应用程序
之前提到使用命令行的方式执行btrace监控,其实jdk提供更好的方式监控应用程序. 我们可以使用jvisualvm.exe加插件的方式监控,这样更加方便. 1.在jvisualvm.exe安装btr ...
- Windows获取文件大小
Windows最初的设计允许我们处理非常大的文件,所以最初的设计者选用64位值来表示文件大小.但是我们在日常处理过程中文件大小一般不会超过4GB.故Windows提供了两个联合类型的数据结构表示文件大 ...
- HTTPS是如何保证连接安全,你知道吗?
HTTPS协议的工作原理是什么?”这是我在数天前工作项目中需要解决的问题. 作为一名Web开发者,我当然知道 HTTPS 协议是保障用户敏感数据的好办法,但并不知道这种协议的内在工作机制. 它怎么保护 ...
- C#winform省市县联动,以及有的县是空值时显示异常的处理
一.如下comboBox1.comboBox2.comboBox3,原来这三个都是空的, 将数据库中的省份传递到comboBox1中 我的数据库有parent字段,根据市的parent找到省,根据县的 ...
- [pjsip]板砖理解pjsip体系结构
在pjsip的官方开发向导中给出两张体系结构图,分别是消息流程图和类图,如下所示: 图1:消息流程图 图2:类图
- 【转】clang warning 警告清单(备查,建议直接command + F 速查 )
Warning Message -WCFString-literal input conversion stopped due to an input byte that does not belon ...
- SpringMvc中的反射
controller中的方法,是通过反射调用的 spring监控controller中的注解,当命令符合某个注解的时候,通过反射,找到这个注解对应的方法,然后调用,处理完成得到返回值,再根据这个返回值 ...