• C#中的静态类和静态成员


    静态类

    静态类是自C# 2.0才引入的,C# 1.0不支持静态类声明。 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量。在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例化该静态类;其次,它防止在类的内部声明任何实例字段或方法。

    静态类的特点:

    • 它们仅包含静态成员。
    • 它们不能被实例化。
    • 它们是密封的。
    • 它们不能包含实例构造函数
    • 静态类的另一个特点在于,C#编译器会自动把它标记为sealed。这个关键字将类指定为不可扩展;换言之,不能从它派生出其他类。

    什么时候使用静态类?

    我们就静态类的特点可以总结出:静态类可以作为不与特定对象关联的方法的组织单元,我们可以把一些工具方法放到一起,因为其和实例没有关系,静态类能够使您的实现更简单、迅速,因为您不必创建对象就能调用其方法。比如类库中的Math类;我们写程序时一些常用的类型转化类等等。

    静态成员

    即使没有创建类的实例,也可以调用该类中的静态方法、字段、属性或事件。如果创建了该类的任何实例,不能使用实例来访问静态成员。只存在静态字段和事件的一个副本,静态方法和属性只能访问静态字段和静态事件。

    静态成员的声明

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

    静态成员特点

    1:非静态类可以包含静态的方法、字段、属性或事件; 2:无论对一个类创建多少个实例,它的静态成员都只有一个副本; 3:静态方法和属性不能访问其包含类型中的非静态字段和事件,并且不能访问任何对象的实例变量; 4:静态方法只能被重载,而不能被重写,因为静态方法不属于类的实例成员; 5:虽然字段不能声明为 static const,但 const 字段的行为在本质上是静态的。这样的字段属于类,  不属于类的实例。因此,可以同对待静态字段一样使用 ClassName.MemberName 表示法来访问 const 字段; 6:C# 不支持静态局部变量(在方法内部定义静态变量)。

    静态构造函数

    1:静态类可以有静态构造函数,静态构造函数不可继承; 2:静态构造函数可以用于静态类,也可用于非静态类; 3:静态构造函数无访问修饰符、无参数,只有一个 static 标志; 4:静态构造函数不可被直接调用,当创建类实例或引用任何静态成员之前,静态构造函数被自动执行,并且 只执行一次。

    注意

    1:非静态类在实例化后是在内存中是独立的,它的变量不会重复,在使用后会及时销毁,所以不会出现未知 的错误。 2:建议更多地使用一般类(非静态类)。
  • 相关阅读:
    查找第一个不重复的字符问题
    gops
    关于 Go 中 Map 类型和 Slice 类型的传递
    Go 程序的性能优化及 pprof 的使用
    Go语言标准库_输入/输出
    Linux 终端 Bash 常用快捷键介绍及经验
    蓄水池采样算法(Reservoir Sampling)
    Guice 依赖绑定
    基本动态规划之硬币问题
    程序打包成jar 获取不到工程目录下文件的问题
  • 原文地址:https://www.cnblogs.com/vsdot/p/3263328.html
Copyright © 2020-2023  润新知