• MSDN知识库_c#关键字_static


           Static 是C#会用到的关键字,可以用来修饰类、字段、方法、属性、运算符、事件和构造函数。今天在多线程中被静态成员不小心被撞了一下,因此将MSDN的内容整理转下来

      一)静态类

        Static修饰的class是静态类,具有以下的特点:

        •     仅包含静态成员。

        •     无法实例化。

        •     是密封的。

        •     不能包含实例构造函数

          偷懒附上MS的代码

      • public static class TemperatureConverter
        {
            public static double CelsiusToFahrenheit(string temperatureCelsius)
            {
                // Convert argument to double for calculations.
                double celsius = 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 = Double.Parse(temperatureFahrenheit);
        
                // Convert Fahrenheit to Celsius.
                double celsius = (fahrenheit - 32) * 5 / 9;
        
                return celsius;
            }
        }
        
        class TestTemperatureConverter
        {
            static void Main()
            {
                Console.WriteLine("Please select the convertor direction");
                Console.WriteLine("1. From Celsius to Fahrenheit.");
                Console.WriteLine("2. From Fahrenheit to Celsius.");
                Console.Write(":");
        
                string selection = Console.ReadLine();
                double F, C = 0;
        
                switch (selection)
                {
                    case "1":
                        Console.Write("Please enter the Celsius temperature: ");
                        F = TemperatureConverter.CelsiusToFahrenheit(Console.ReadLine());
                        Console.WriteLine("Temperature in Fahrenheit: {0:F2}", F);
                        break;
        
                    case "2":
                        Console.Write("Please enter the Fahrenheit temperature: ");
                        C = TemperatureConverter.FahrenheitToCelsius(Console.ReadLine());
                        Console.WriteLine("Temperature in Celsius: {0:F2}", C);
                        break;
        
                    default:
                        Console.WriteLine("Please select a convertor.");
                        break;
                }
        
                // Keep the console window open in debug mode.
                Console.WriteLine("Press any key to exit.");
                Console.ReadKey();
            }
        }

        二)静态成员

            非静态类可以包含静态的方法、字段、属性或事件。 即使没有创建类的实例,也可以调用该类中的静态成员。 始终通过类名而不是实例名称访问静态成员。 无论对一个类创建多少个实例,它的静态成员都只有一个副本(今天就是被撞在这里了)。 静态方法和属性不能访问其包含类型中的非静态字段和事件,并且不能访问任何对象的实例变量(除非在方法参数中显式传递)。静态方法可以被重载但不能被重写,因为它们属于类,不属于类的任何实例。const 关键字描述的本质上也是静态的,也可以用类似的结构进行访问。 

    {
        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...
    }
    访问示例:
    Automobile.Drive();
    int i = Automobile.NumberOfWheels; (const关键字修饰的成员本质上是静态的 ,也用这种方式调用)

          静态方法可以被重载但不能被重写,因为它们属于类,不属于类的任何实例。

      三)静态构造函数

        静态构造函数用于初始化任何 静态 数据,或用于执行仅需执行一次的特定操作。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。静态构造函数具有以下的特点:

      •   静态构造函数既没有访问修饰符,也没有参数。

      •   在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化

      •   无法直接调用静态构造函数。

      •   在程序中,用户无法控制何时执行静态构造函数。

      •   静态构造函数的典型用途是:当类使用日志文件时,将使用这种构造函数向日志文件中写入项。

      •   静态构造函数在为非托管代码创建包装类时也很有用,此时该构造函数可以调用 LoadLibrary 方法。

      •   如果静态构造函数引发异常,运行时将不会再次调用该构造函数,并且在程序运行所在的应用程序域的生存期内,类型将保持未初始化。

      引用地址:

                   https://msdn.microsoft.com/zh-cn/library/98f28cdx.aspx;

          https://msdn.microsoft.com/zh-cn/library/79b3xss3.aspx;

          https://msdn.microsoft.com/zh-cn/library/k9x6w0hc.aspx;

  • 相关阅读:
    数组指针和指针数组的区别
    C++虚函数
    C++容器
    红黑树
    COM RTS/CTS, DTR/DSR
    linux和windows多线程的异同
    socket
    C++vector使用
    select函数详解
    linux下头文件
  • 原文地址:https://www.cnblogs.com/hhhh2010/p/5256486.html
Copyright © 2020-2023  润新知