6.4 静 态 类
CLR中有一些永远不需要实例化的类,例如Console,Math,Environment和ThreadPool类。这些类仅拥有静态成员,实际上,这些类只是将一组相关的成员组合在一起。例如,Math类定义了一组与数学运算相关的方法。C#允许通过使用C#中的关键字static定义非实例化(non-instantiable)的类。关键字static仅可以用于类,而不能用于结构(值类型),这是因为CLR要求值类型必须实例化,并且没有方法停止或阻止该实例化过程。
C#编译器对静态类强加如下所示:
静态类必须直接从基类System.Object派生,这是因为从其他基类派生的类由于继承性仅适用于对象的缘故而没有任何意义,而且不能创建静态类的实例。
静态类不能实现任何接口,这是因为只有使用类的实例时才去调用类的接口方法。
静态类只能定义静态成员(字段、方法、属性和事件),任何实例成员都将导致编译器产生错误。
静态类不能用作字段、方法参数或者局部变量,这是因为这些用法都将表明变量引用了实例,而这是不允许的。如果编译器检测到这样的用法,编译器就会产生一个错误。
下面的代码是静态类的范例,该类定义了一些静态成员;该代码可以通过编译(不过会出现警告信息),但是这个类没有做任何有意义的事情。
using System;
public static class AStaticClass {
public static void AStaticMethod() { }
public static String AStaticProperty {
get { return s_AStaticField; }
set { s_AStaticField = value; }
}
private static String s_AStaticField;
public static event EventHandler AStaticEvent;
}
|
如果将上述代码编译为库(DLL)程序集,并通过ILDasm.exe查看结果,会发现结果如图6.2所示。通过使用关键字static定义的类将导致C#编译器将该类同时标记为abstract和sealed。另外,编译器不会在类型中生成实例构造器方法。注意,图6.2中没有实例构造器(.ctor)方法。
![]() |
| 图6.2 ILDasm.exe表明类在元数据中是抽象、密封的 |
| 回书目 上一节 下一节 |
|
· Linux笔试面试题选摘测.. · 08年5月软考网管上午真.. · 性能测试从零开始 目录 · 08年5月软考网工上午真.. · 上周拒绝服务攻击(DDo.. · 08年5月各大网上书店及.. |
· 2008年5月24日软考试题.. · 软件设计师专家临考模.. · 上周网络管理员专家自.. · 网络工程师自测获奖名.. · 08年4月各大网上书店及.. · 系统分析师自测获奖名.. |
|
||||
| · ASP.NET开发教程 · 专题:ASP.NET 2.0基础.. · LAMP技术精解 · 服务器节能与绿色IT · ARP攻击防范与解决方案 · Linux 集群技术专题 · Windows集群服务应用 · CISSP认证成长之路 |
· SQL Server 2008/2005.. · SQL Server入门到精通 · 网络工程师职业规划与.. · 浏览器的战国时代 · 运营商封堵ADSL共享 中.. · 微软出价446亿美元收购.. · 技术人求职简历完备手册 · 开源虚拟化技术Xen |
|||
|
||||
| · SOA 面向服务架构 · SQL Server 2008/2005.. · Apache技术专题 · 三层交换技术专题 · SQL Server入门到精通 · Apache技术专题 · Windows集群服务应用 · 国际文档格式标准开战 |
· 路由器设置与口令恢复 · Linux 集群技术专题 · PHP开发应用手册 · SOA 面向服务架构 · 企业数据恢复指南 · 了解统一威胁管理(UTM).. · 专题:AIX操作系统管理.. · 访问控制列表(ACL)介绍 |
|||
|
||||
| · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · Apache技术专题 · 三层交换技术专题 · Apache技术专题 · 企业数据恢复指南 · Windows集群服务应用 |
· 路由器设置与口令恢复 · Linux 集群技术专题 · SOA 面向服务架构 · 了解统一威胁管理(UTM).. · 反垃圾邮件技术应用 · 访问控制列表(ACL)介绍 · ASP.NET开发教程 · PHP开发应用手册 |
|||