`

C# 语法书 <3> 静态类,别名等等

阅读更多
最近比较忙,所以先跳过第二章委托,先介绍一些林林总总的小更新。

静态类

适用范围: C# 2.0以以后版本

在C# 2.0之前的版本里,你是无法将一个类声明成静态的。如果我们希望一个类是静态的,也就是希望强制要求这个类中的所有成员都应该为静态的,就无能为力了,唯一能做的就是自己注意将所有的成员声明为static。

当我们忘记对一个本应是静态的成员使用static修饰符(尽管这是一个“低级错误”,但仍有可能发生)时,将会产生难以预料的错误。最重要的是,对于一个逻辑上的静态类(所有成员均使用static修饰符进行声明的类),我们甚至可以声明该类的一个变量并使用new操作符产生该类的实例!这显然不是我们所期望的。


在C#2.0中,则提供了静态类这一概念,允许static修饰符对类进行修饰。如果一个类声明中包含了static修饰符,那么这个类中的所有成员将被强制要求声明为静态的。这时,如果我们故意在类中声明实例成员或是不小心忘记了成员声明中的static修饰符,则编译器会报告错误:

error CS0708: '<some field>': cannot declare instance members in a static class

同时,如果我们声明该类的变量或是试图建立该类的一个实例时,如下面的代码:
则会得到下面的两个编译错误:
error CS0723: Cannot declare variable of static type '<some class>'
error CS0712: Cannot create an instance of the static class '<some class>'


名称空间别名

在C#中,通过使用using指令,我们可以向编译器指定一系列命名空间,当程序中出现了类名字时,编译器会自动到这些命名空间中查找这个类。

但是两个命名空间中很可能具有同名的类,而我们恰好需要用到这些同名的类。这种情况会经常发生。

譬如在.net框架类库中就存在有三个Timer类:System.Timer.Timer、System.Threading.Timer和System.Windows.Forms.Timer。

这时,尽管我们使用了using指令,我们仍然需要在这些类出现时加上名称空间:

using System.Timer;
using System.Windows.Forms;
// ......
public class MainForm : Form {
    System.Timer.Timer CheckTimer;
    System.Windows.Forms.Timer AnimateTimer;
    // ......
}


在C#2.0中,我们可以使用using指令来为名称空间指定一个别名。当我们需要引用这个命名空间时,可以简单地使用它的别名。

为命名空间创建一个别名时,我们使用using指令的扩展用法:using Alias = Namespace,即可为命名空间Namespace指定一个别名Alias。

当我们引用一个名称空间中的类型的时候,只需要在命名空间后面加一个圆点“.”再跟上类型名称即可:

using SysTimer = System.Timer;
using WinForm = System.Windows.Forms;
// ......
public class MainForm : WinForm.Form {
    SysTimer.Timer CheckTimer; // 与命名空间的使用完全相同
    WinForm.Timer AnimateTimer;
    // ......
}


分享到:
评论

相关推荐

    一本讲解c#语言规范的书,写的很详细(第二部分)

    - 在C#中,可以通过在类型声明(如类、接口或方法)中使用尖括号`&lt;&gt;`来定义一个泛型类型。例如: ```csharp public class GenericClass&lt;T&gt; { // 成员 } ``` 使用泛型类型时,需要提供具体的类型参数,称为...

    C#学习完全手册经典之作

    深入到对象和类型这一章,书中详细阐述了类和结构的创建与使用,包括类成员(数据成员和函数成员)、只读字段、结构的特点(如值类型、结构与继承)、部分类和静态类的概念。Object类作为所有类的基类,提供了诸如...

    CSharp2.0规格说明书

    ### C# 2.0 规格说明书关键知识点解析 #### 一、C# 2.0 简介 C# 2.0 是 Microsoft 在 .NET Framework 2.0 中引入的一个重要版本,它增加了许多新特性,极大地提高了开发效率与程序的灵活性。这些新特性主要包括...

    轻松学C#(图解版)

    所属分类:计算机 &gt; 软件与程序设计 &gt; C# ================================================================ 内容简介 本书由浅入深,全面、系统地介绍了C#程序设计。除了详细地讲解C#知识点外,本书还提供了大量...

    21天学通C#

    C#是.NET框架的核心语言,它结合了C++的静态类型检查和Java的简洁性,旨在提高开发效率和代码质量。C#支持多种编程范式,包括面向对象、面向组件和泛型编程。 二、基本语法 C#的语法结构清晰,易于理解。学习之初,...

    C#与.NET技术平台实战演练.part1

    3 定义类的语法8-2 类与结构的比较结构适用于"轻量型"的对象8-3 数据封装8-4 数据与方法的存取控制8-4-1 使用成员访问修饰符8-4-2 良好的数据隐藏方式设计8-4-3 数据封装的目的8-5 使用静态成员8-5-1 声明...

    C#高级编程(第六版) 目录

    本章专注于C#的面向对象特性,包括类、结构、匿名类型、部分类、静态类、Object类以及扩展方法。详细解释了类成员的类型,如数据成员、函数成员和只读字段,以及结构作为值类型的特点和限制。同时,部分类和静态类的...

    C#与.NET技术平台实战演练.part2

    3 定义类的语法8-2 类与结构的比较结构适用于"轻量型"的对象8-3 数据封装8-4 数据与方法的存取控制8-4-1 使用成员访问修饰符8-4-2 良好的数据隐藏方式设计8-4-3 数据封装的目的8-5 使用静态成员8-5-1 声明...

    C#基本概念二十五问.pdf

    《C#基本概念二十五问》一书聚焦于C#编程语言的核心原理,旨在为初学者和进阶者提供深入理解的基础。以下是对其中部分关键知识点的详细解析: ### 1. 静态成员与非静态成员的区别 静态成员属于类本身,而非具体的...

    Programming Kotlin(pdf+epub+mobi+code_file).zip

    它吸收了多种编程语言的优点,如Java的面向对象特性、C#的lambda表达式以及Groovy的简洁语法。 在《Programming Kotlin》中,读者将学习到: 1. **基础语法**:包括变量声明、数据类型、控制流语句、函数和类等...

    expert F# 2.0 source code

    在编程领域,F#是一种功能丰富的、静态类型的编程语言,它融合了面向对象、函数式和组件式编程范式。本资源库包含的是《专家级F# 2.0源代码》,这是一本深入探讨F# 2.0语言特性和实践应用的书籍的配套代码。通过这些...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

    7.11.3 定义引用类类型的复制构造函数 346 7.11.4 类属性 346 7.11.5 initonly字段 358 7.11.6 静态构造函数 360 7.12 小结 360 7.13 练习 360 7.14 本章主要内容 361 第8章 深入理解类 363 8.1 类析构函数 ...

    IntroToFSharpSlides:介绍 F# 演示文稿的幻灯片

    3. **基本语法**:介绍F#的基本数据类型、变量、函数和控制流。 4. **函数式编程实践**:展示如何使用高阶函数、递归和模式匹配解决问题。 5. **类型系统详解**:深入讲解类型推断、联合类型、记录类型和对象模型。 ...

Global site tag (gtag.js) - Google Analytics