C# Static关键词的使用

一、C#中类的方法分为静态方法和非静态方法

 静态方法有Static关键词修饰

静态方法归类所有,而非静态方法归类的实例所有:静态方法无需类去实例化可直接调用

静态成员属于类所有,为各个类的实例所公用,无论类创建了多少实例,类的静态成员在内存中只占同一块区域。而类的非静态成员会在类实例化后分配内存中的区域

静态方法和非静态方法的区别

非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员。

因为静态方法在类实例化前就可以使用,而类中的非静态变量必须在实例化之后才能分配内存,C#静态方法调用时无法判断非静态成员变量使用的内存地址,所以静态方法访问不到非静态成员,而静态变量的地址对类来说是固定的,故可以在实例化前访问使用。

static内部只能出现static变量和其他static方法!而且static方法中还不能使用this....等关键字..因为它是属于整个类!

静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁(主进程结束后才会销毁),而实例化的则可以做销毁。

静态方法和静态变量创建后始终使用同一块内存,而使用实例的方式会创建多个内存.

C#静态方法中获取类的名称

        静态方法中用:
        string className =   System.Reflection.MethodBase.GetCurrentMethod().ReflectedType.FullName;

非静态方法中还可以用:
string className = this.GetType().FullName; 

二、静态类(被static修饰的类)

静态类的特点

  • 静态类不能实例化对象
  • 静态类不能存在非静态成员(变量,函数)
  • 静态类里的构造方法不能有权限修饰符(public,private...)不能有参数
  • 静态类不能被其他类继承,也不能继承其他类

下面是代码理解

namespace _2022test
{
    public static class Students
    {
        /*静态类中不允许写非静态的成员
        public int name;
        public int Name
        {
            get
            {
                return name;
            }
        }
        */
        /*
        public Students(){ }//静态类中不能写构造方法
        */
        public static int name;
        public static int Name
        {
            set
            {
                name = value;
            }
        }
        public static void Score() { }
 
        static Students()//静态的构造方法不能有权限修饰符和参数
        {
 
        }
 
        
 
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            //Students stu = new Students();静态类不能实例化对象
 
        }
    }
}

 

posted @ 2022-04-01 09:39  派大没有星  阅读(84)  评论(0编辑  收藏  举报