zoukankan      html  css  js  c++  java
  • 静态类与非静态类,静态成员及使用方法

    C# 静态类与非静态类、静态成员的区别

     (2010-06-10 19:35:53)
    标签: 

    静态类

     

    非静态类

     

    静态成员

    分类: C#

    静态类

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

        静态类是自C# 2.0才引入的,C# 1.0不支持静态类声明。程序员必须声明一个私有构造器。私有构造器禁止开发者在类的范围之外实例化类的实例。使用私有构造器的效果与使用静态类的效果非常相似。两者的区别在于,私有构造器方式仍然可以从类的内部对类进行实例化,而静态类禁止从任何地方实例化类,其中包括从类自身内部。静态类和使用私有构造器的另一个区别在于,在使用私有构造器的类中,是允许有实例成员的,而C# 2.0和更高版本的编译器不允许静态类有任何实例成员。使用静态类的优点在于,编译器能够执行检查以确保不致偶然地添加实例成员,编译器将保证不会创建此类的实例。静态类的另一个特征在于,C#编译器会自动把它标记为sealed。这个关键字将类指定为不可扩展;换言之,不能从它派生出其他类。


    静态类的主要特性:
    1:仅包含静态成员。
    2:无法实例化。
    3:是密封的。
    4:不能包含实例构造函数。


    静态成员

    1:非静态类可以包含静态的方法、字段、属性或事件;

    2:无论对一个类创建多少个实例,它的静态成员都只有一个副本;

    3:静态方法和属性不能访问其包含类型中的非静态字段和事件,并且不能访问任何对象的实例变量;
    4:静态方法只能被重载,而不能被重写,因为静态方法不属于类的实例成员;
    5:虽然字段不能声明为 static const,但 const 字段的行为在本质上是静态的。这样的字段属于类,

       不属于类的实例。因此,可以同对待静态字段一样使用 ClassName.MemberName 表示法来访问 const 字段;6:C# 不支持静态局部变量(在方法内部定义静态变量)。

    静态构造函数

    1:静态类可以有静态构造函数,静态构造函数不可继承;

    2:静态构造函数可以用于静态类,也可用于非静态类;

    3:静态构造函数无访问修饰符、无参数,只有一个 static 标志;

    4:静态构造函数不可被直接调用,当创建类实例或引用任何静态成员之前,静态构造函数被自动执行,并且

       只执行一次。

    注意:

    1:静态类在内存中是一直有位置的;

    2:非静态类在实例化后是在内存中是独立的,它的变量不会重复,在使用后会及时销毁,所以不会出现未知

       的错误。在C#中静态成员是比较敏感的东西,在不是十分确认的情况下不要使用

    3:建议更多地使用一般类(非静态类)。

    使用选择:

        当定义的类不需要进行实例化时,我们使用静态类;如果需要实例化对象,需要继承等特性时,应该使用非静态类,并且将统一使用的变量和方法设为静态的,那么所有实例对象都能访问。

  • 相关阅读:
    Android开发 使用 adb logcat 显示 Android 日志
    【嵌入式开发】向开发板中烧写Linux系统-型号S3C6410
    C语言 结构体相关 函数 指针 数组
    C语言 命令行参数 函数指针 gdb调试
    C语言 指针数组 多维数组
    Ubuntu 基础操作 基础命令 热键 man手册使用 关机 重启等命令使用
    C语言 内存分配 地址 指针 数组 参数 实例解析
    CRT 环境变量注意事项
    hadoop 输出文件 key val 分隔符
    com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: Too many connections
  • 原文地址:https://www.cnblogs.com/yanyao/p/4851982.html
Copyright © 2011-2022 走看看