zoukankan      html  css  js  c++  java
  • C#关键字static

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Test
    {
        class Program
        {
            public static int i = 0;
    
            public Program()
            {
                i = 1;
                Console.Write("实例构造方法被调用");
            }
    
            static Program()
            {
                i = 2;
                Console.Write("静态构造函数被执行");
            }
    
            //1:静态类可以有静态构造函数,静态构造函数不可继承;
            //2:静态构造函数可以用于静态类,也可用于非静态类;
            //3:静态构造函数无访问修饰符、无参数,只有一个 static 标志;
            //4:静态构造函数不可被直接调用,当创建类实例或引用任何静态成员之前,静态构造函数被自动执行,并且只执行一次。
            static void Main(string[] args)
            {
                A.name = "haha";
                Console.WriteLine(A.name);
                Console.Write(Program.i);//结果为2,首先,类被加载,所有的静态成员被创建在静态存储区,i=0,接着调用了类的成员,这时候静态构造函数就会被调用,i=2
                Program p = new Program();
                Console.Write(Program.i);//结果为1,实力化后,调用了实例构造函数,i=1,因为静态构造函数只执行一次,所以不会再执行。
                Console.ReadLine();
            }
        }
    
        //静态类
        //1:仅包含静态成员。
        //2:无法实例化。 
        //3:静态类的本质,是一个抽象的密封类,所以不能被继承,也不能被实例化。
        //4:不能包含实例构造函数。
        //5:如果一个类下面的所有成员,都需要被共享,那么可以把这个类定义为静态类。
        static class Humman
        {
            //声明的方法、字段、属性都必须为静态的
            public static int age;
            public static string name { get; set; }
            public static void Run()
            {
                Console.WriteLine("Run!");
            }
        }
    
        //1、通过static关键字修饰,是属于类,实例成员属于对象,在这个类第一次加载的时候,这个类下面的所有静态成员会被加载。
        //2、静态成员只被创建一次,所以静态成员只有一份,实例成员有多少个对象,就有多少份。
        //3、类加载的时候,所有的静态成员就会被创建在“静态存储区”里面,一旦创建直到程序退出,才会被回收。
        //4、变量需要被共享的时候,方法需要被反复调用的时候,就可以把这些成员定义为静态成员。
        //5、在静态方法中,不能直接调用实例成员,因为静态方法被调用的时候,对象还有可能不存在。
        //6、this/base 关键字在静态方法中不能使用,因为有可能对象还不存在。
        //7、可以创建这个类的对象,制定对象的成员在静态方法中操作。
        //8、在实例方法中,可以调用静态成员,因为这个时候静态成员肯定存在。
        //9、非静态类可以包含静态的方法、字段、属性或事件;
        //10、无论对一个类创建多少个实例,它的静态成员都只有一个副本;
        //11、静态方法和属性不能访问其包含类型中的非静态字段和事件,并且不能访问任何对象的实例变量;
        //12、静态方法只能被重载,而不能被重写,因为静态方法不属于类的实例成员;
        //13、虽然字段不能声明为 static const,但 const 字段的行为在本质上是静态的。这样的字段属于类,不属于类的实例。
        public class A
        {
            //静态方法是不属于特定对象的方法,
            //静态方法可以访问静态成员变量,
            //静态方法不可以直接访问实例变量,可以在实例函数调用的情况下,实例变 量做为参数传给静态方法。
            //静态方法也不能直接调用实例方法,可以间接调用,首先要创建一个类的实例,然后通过这一特定对象来调用静态方法。
            public static string name;
            public string Fullname;
            public static string GetName()
            {
                return name;
                //return Fullname;
            }
        }
    }
  • 相关阅读:
    解决PKIX:unable to find valid certification path to requested target 的问题
    Linux 上的常用文件传输方式介绍与比较
    用VNC远程图形化连接Linux桌面的配置方法
    红帽中出现”This system is not registered with RHN”的解决方案
    linux安装时出现your cpu does not support long mode的解决方法
    CentOS SSH配置
    es6扩展运算符及rest运算符总结
    es6解构赋值总结
    tortoisegit安装、clon、推送
    es6环境搭建
  • 原文地址:https://www.cnblogs.com/lgxlsm/p/2946354.html
Copyright © 2011-2022 走看看