zoukankan      html  css  js  c++  java
  • 脚踏实地学C#4-静态类

    起因

         问:静态类可以实现接口及继承?

         答:都不可以

         思考:为什么不可以呢?

    学习

         静态类,有时我们又称为工具类(密封抽象类),从MSDN文档没有直接静态类的定义,这里只能说用static(不能用于结构,只能用于类)关键字声明的类,就是静态类。

         静态类与非静态类的区别:静态类不能实例化,就是不能通过使用 new 关键字创建静态类类型的变量。通过类名本身访问自身成员;   

         特性:1、仅包含静态成员(字段、方法、属性、事件)

                    2、无法实例化

                    3、是密封的

                    4、不能包含实例构造函数

    定义静态类及其使用

       //定义静态类和静态方法,未定义静态字段、属性、事件
       public static class CommonHelper
        {       
           public static void PrintContent()
           {
               Console.WriteLine("Static Class");           
           }
        }
        
     CommonHelper.PrintContent(); //调用静态类的静态方法

               静态类加载时机:和所有类类型一样,当加载引用静态类的程序时,.NET Framework 公共语言运行时 (CLR) 将加载该静态类的类型信息。程序不能指定加载静态类的确切时间。但是,可以保证在程序中首次引用该类前加载该类,并初始化该类的字段并调用其静态构造函数。静态构造函数仅调用一次,在程序驻留的应用程序域的生存期内,静态类一直保留在内存中。

    静态类的本质

              通过静态类的的特性,就可以回答

                          1、静态类为可以实现接口?不可以,因为静态类无法实例化(只有类的实例才可以调用类中的接口方法)

                          2、静态类可以被继承吗?不可以,因为静态类是密封的

             这样来回答比较笼统,也不具有说服力哈,通过生成的IL就能清楚知道为什么了!

    .class public abstract auto ansi sealed beforefieldinit CommonHelper  
        extends [mscorlib]System.Object
        //通过abstract关键字 不能实例化
        //通过sealed关键字 不能让其他类继承
    {
        .method public hidebysig static void PrintContent() cil managed
        {
            .maxstack 8
            L_0000: ldstr "Static Class"
            L_0005: call void [mscorlib]System.Console::WriteLine(string)
            L_000a: ret 
        }
    
    }

    静态类、静态成员所分配的内存在程序结束时,才能被释放

  • 相关阅读:
    Linux下守护进程的编程实现(转)
    gcc 中-I、 -L 与-l选项的作用
    va_list 、va_start、 va_arg、 va_end 使用说明
    sizeof('a')在C与C++中的区别
    Qt主要类简介
    linux命令
    linux文件编程
    linux一些基本命令
    Linux主机SSH免密设置解析
    javaweb添加拦截器
  • 原文地址:https://www.cnblogs.com/qq0827/p/3347781.html
Copyright © 2011-2022 走看看