`
wx1569567608
  • 浏览: 62628 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

静态类和静态类成员

 
阅读更多
C# 编程指南
静态类和静态类成员(C# 编程指南)
静态类和类成员用于创建无需创建类的实例就能够访问的数据和函数。静态类成员可用于分离独立于任何对象标识的数据和行为:无论对象发生什么更改,这些数据和函数都不会随之变化。当类中没有依赖对象标识的数据或行为时,就可以使用静态类。
静态类
类可以声明为 static 的,以指示它仅包含静态成员。不能使用 new 关键字创建静态类的实例。静态类在加载包含该类的程序或命名空间时由 .NET Framework 公共语言运行库 (CLR) 自动加载。
使用静态类来包含不与特定对象关联的方法。例如,创建一组不操作实例数据并且不与代码中的特定对象关联的方法是很常见的要求。您应该使用静态类来包含那些方法。
静态类的主要功能如下:
因此创建静态类与创建仅包含静态成员和私有构造函数的类大致一样。私有构造函数阻止类被实例化。
使用静态类的优点在于,编译器能够执行检查以确保不致偶然地添加实例成员。编译器将保证不会创建此类的实利。
静态类是密封的,因此不可被继承。静态类不能包含构造函数,但仍可声明静态构造函数以分配初始值或设置某个静态状态。有关更多信息,请参见 静态构造函数(C# 编程指南)
何时使用静态类
假设有一个类 CompanyInfo,它包含用于获取有关公司名称和地址信息的下列方法。
C#

复制代码class CompanyInfo{    public string GetCompanyName() { return "CompanyName"; }    public string GetCompanyAddress() { return "CompanyAddress"; }    //...}
不需要将这些方法附加到该类的具体实例。因此,您可以将它声明为静态类,而不是创建此类的不必要实例,如下所示:
C#

复制代码static class CompanyInfo{    public static string GetCompanyName() { return "CompanyName"; }    public static string GetCompanyAddress() { return "CompanyAddress"; }    //...}
使用静态类作为不与特定对象关联的方法的组织单元。此外,静态类能够使您的实现更简单、迅速,因为您不必创建对象就能调用其方法。以一种有意义的方式组织类内部的方法(例如 System 命名空间中的 Math 类的方法)是很有用的。
静态成员
即使没有创建类的实例,也可以调用该类中的静态方法、字段、属性或事件。如果创建了该类的任何实例,不能使用实例来访问静态成员。只存在静态字段和事件的一个副本,静态方法和属性只能访问静态字段和静态事件。静态成员通常用于表示不会随对象状态而变化的数据或计算;例如,数学库可能包含用于计算正弦和余弦的静态方法。
在成员的返回类型之前使用 static 关键字来声明静态类成员,例如:
C#

复制代码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...}
静态成员在第一次被访问之前并且在任何静态构造函数(如调用的话)之前初始化。若要访问静态类成员,应使用类名而不是变量名来指定该成员的位置。例如:
C#

复制代码Automobile.Drive();int i = Automobile.NumberOfWheels;
示例
下面是一个静态类的示例,它包含两个在摄氏温度和华氏温度之间执行来回转换的方法:
C#

复制代码public static class TemperatureConverter{    public static double 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;    }    public static double 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{    static void 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 select the convertor
1. From Celsius to Fahrenheit.
2. From Fahrenheit to Celsius.
:2
Please enter the Fahrenheit temperature: 98.6
Temperature in Celsius: 37.00
附加的示例输出可能如下所示:
Please select the convertor
1. From Celsius to Fahrenheit.
2. From Fahrenheit to Celsius.
:1
Please enter the Celsius temperature: 37.00
Temperature in Fahrenheit: 98.60
C# 语言规范
有关更多信息,请参见 C# 语言规范 中的以下各章节:
  • 25.2 静态类
请参见
参考 class(C# 参考)
实例构造函数(C# 编程指南)
概念 C# 编程指南
静态类设计
类(C# 编程指南)

转载于:https://my.oschina.net/u/158055/blog/694461

分享到:
评论

相关推荐

    .NET :静态类的理解

    静态类的关键特征在于它们是通过 `static` 关键字声明的,并且只能包含静态成员,即静态字段、静态方法、静态属性等。由于这些特性,静态类在内存管理、性能以及代码设计上都有其独特的优点。 首先,静态类不能通过...

    MSIL 静态类在 IL 定义上和非静态类的差别.rar

    **标题解析:** "MSIL 静态类在 IL 定义上和非静态类的差别" 在.NET框架中,Microsoft Intermediate Language (MSIL) 是编译器生成的中间语言,它作为C#, VB.NET等高级语言与硬件平台之间的桥梁。本主题将探讨在...

    C++类中的静态成员变量和静态成员函数的作用

    ### C++类中的静态成员变量和静态成员函数的作用 #### 静态成员变量与静态成员函数概述 在C++编程语言中,类是面向对象编程的基础,它允许程序员定义包含数据成员(变量)和成员函数(方法)的复合数据类型。其中...

    Java中的静态变量静态方法静态块与静态类.docx

    Java 中的静态变量、静态方法、静态块和静态类 Java 中的静态变量、静态方法、静态块和静态类是 Java 编程语言的四个重要概念,它们之间存在着紧密的关系。下面将对这四个概念进行详细的介绍。 一、静态变量...

    php中静态类与静态变量用法类.zip

    直接调用类方法量:class::attribute/function,无论是静态/非静态都可以,静态static:声明类成员或方法为 static,就可以不实例化类而直接访问,不能通过一个对象来访问其中的静态成员(静态方法除外),静态成员属于类,不...

    c#面向对象静态类、构造方法、静态方法介绍.zip

    首先,静态类是C#中不能被实例化的类,它们只包含静态成员(如静态字段和静态方法)。静态类在程序运行时只有一个共享的实例,无需通过“new”关键字来创建。它们主要用于存储全局常量、辅助方法或者工具类,例如`...

    C++静态成员函数与静态成员变量小结

    静态成员在C++中扮演着重要的角色,包括静态数据成员和静态函数成员两部分。静态成员是指在类体中使用static修饰符声明的成员,可以直接使用类名+静态成员名访问该静态成员。静态成员存在于内存中,而非静态成员需要...

    实现易语言类静态数据成员的方法

    类中的数据成员可以分为实例数据成员和静态数据成员。实例数据成员属于类的每个对象,而静态数据成员则被所有类的对象共享。本文将详细讲解如何在易语言中实现类的静态数据成员。 首先,我们需要理解静态数据成员的...

    c++静态成员使用实例

    在C++编程语言中,静态成员是一个非常重要的概念,它为类提供了一种共享数据和功能的方法。静态成员不依赖于任何对象实例,而是属于类本身。本篇将通过两个实例——静态成员函数和静态数据成员,深入探讨它们在C++中...

    Visual Studio2012链接MySQL的静态类

    静态类是不包含实例成员的类,它的所有成员都是静态的。在本例中,"getsqldata.cs"可能定义了一个静态类,用于封装连接MySQL数据库的方法,比如打开连接、执行SQL语句、获取数据等。使用静态类的好处在于无需创建...

    ConsoleTest2 C#基础静态类 实例类.rar

    静态类的主要目的是为了提供全局共享的成员,如方法、属性和常量,这些成员在程序运行期间只被加载一次。例如,`System.Math`类就是C#中的一个静态类,它包含了许多数学运算的静态方法,如`Math.Sqrt()`用于计算...

    静态成员与静态方法

    静态成员与静态方法 静态成员变量是一种特殊类型的成员变量,它可以在不创建类的...静态成员变量和静态方法是Java编程语言中两个重要的概念,它们可以在不创建对象实例的情况下使用,並且可以通过类名直接访问或调用。

    易语言源码实现易语言类静态数据成员的方法.7z

    实现易语言类静态数据成员的方法如下: 1. **声明静态数据成员**: 在易语言的类定义中,可以使用“静态”关键字来声明一个数据成员为静态。例如: ```易语言 类 定义 名为 MyClass 静态 整数 变量 名为 static...

    C#中的静态成员、静态方法、静态类介绍

    在C#编程语言中,静态成员、静态方法和静态类是关键的概念,它们在程序设计中扮演着重要的角色。下面将详细介绍这些概念及其用途。 **1. 静态成员和实例成员** **1.1 定义及说明** **静态成员**包括静态变量和...

    静态数据成员与子对象

    在编程中,静态数据成员和静态成员函数是类的一个重要特性,它们与普通的成员变量和成员函数有所不同。静态数据成员属于类,而不是类的每个实例,这意味着所有类的实例共享同一份静态数据成员的副本。这使得静态数据...

    3.2静态成员&类模板_类的静态成员_

    结合静态成员和类模板,我们可以创建具有静态特性的泛型类,例如,一个静态计数器,它跟踪使用特定模板创建的对象数量: ```cpp template class MyClass { private: static int count; // 静态数据成员 public: ...

    普通成员函数、类成员函数和类静态成员函数实例(VS2010)

    本实例主要探讨了三种类型的成员函数:普通成员函数、类成员函数和类静态成员函数。以下是对这三种函数类型的详细解释: 1. 普通成员函数(Non-static Member Functions): 普通成员函数是类的一部分,它们可以...

    C++静态成员函数小结

    静态成员函数可以分为两部分:静态数据成员和静态函数成员。 一、静态数据成员 静态数据成员是类中的全局变量,它们遵守public、protected和private访问规则。静态数据成员的定义需要在cpp文件中进行,而不能在...

Global site tag (gtag.js) - Google Analytics