C# 面向对象之关于静态static

c#中的静态static有很多,比如静态字段,静态属性,静态方法,静态类等。

所谓静态是相对于动态而言的,那么什么是静态,什么又是动态呢?

我们知道很多类可以实例化对象,比如老虎类可以实例化出大虎、二虎等等。

如果一个类中的字段是普通字段,实例化后可以使用大虎.字段名进行调用,改写等操作,这个字段归属于实例大虎,当然二虎也有同名的字段,这个字段被很对实例拥有,我们说他是动态的。

如果这个字段是静态字段呢,他不属于任何实例,因此不能用实例名.字段调用,只能通过类名.字段名调用。他只属于当前的类,不属于任何实例。我们说这样的字段叫static。

根据以上特性,我们来看点具体的东西

 

引.static关键字

static关键字:用于修饰类,字段,属性,方法,构造方法等

被static修饰的类称为“静态类”

被static修饰的成员称为“静态成员”:静态字段、静态属性、静态方法、静态构造方法。

一、静态之字段与属性

1.静态字段

被static修饰的字段称为“静态字段”。

静态字段不属于任何实例对象,只属于类,必须用类名.静态字段名进行访问。

通过对象名.静态字段名的方式无法访问静态字段。

    class CatType
    {
        static string name = "王二"; 
    }

注:根据文首所述,静态字段拥有以下特性:

静态字段可以重新赋值,类名.静态字名 = 值;

静态字段存储的数据在内存中只有一份;

实例(对象)字段在内存中会有N份,有多少对象就有多少实例字段

2.静态属性

被static关键字修饰的属性,叫做静态属性。

静态属性用于对静态字段进行封装,并保证静态字段的合法性。

静态属性使用:类名.静态属性名进行访问

    class CatType
    {
        static string name = "王二"; //静态字段
        
        static string Name  //静态属性,封装静态字段
        {
            get { return name; }
            set { name = value; }
            
        }
    }

注意:静态属性具有以下特点

静态属性不能用于封装非静态字段,因为静态的类成员(写类时已经存在)是先于非静态的类成员(实例化后才有)存在的。

二、静态之方法与类

1.静态普通方法

被static关键字修饰的方法,叫做静态方法。

直接使用类名.静态方法名进行访问

如我们常用的:

Console.WriteLine("快乐老家!")
//这里的WriteLine()就是静态方法,Console是类名

注:

控制台程序的program入口类中的main函数就是一个静态方法;

静态方法中不能调用非静态方法:

因为静态方法在非静态方法之前就存在,此时非静态方法不存在无法调用,

因此,非静态方法可以调用静态方法

        static void p()
        {
            Console.WriteLine("俺是静态方法");
        }
        public void p1()
        {
            Console.WriteLine("俺是非静态方法");
            p();    //调用了哦
        }

2.静态构造方法

作用:用于初始化静态成员(静态字段、静态属性、静态方法)

一个类只有一个静态方法,该静态方法没有任何访问修饰符,也没有参数,无法重载

可以定义在静态类中,也可以定义在非静态类中

    class CatType
    {
        static CatType()    //静态方法
        {

        }
    }

注:静态构造方法会在程序创建第一个实例,或引用任何静态成员之前对所有静态成员进行初始化。

3.静态类

当类中所有成员都是静态成员的时候,可以把这个类声明为静态类。

只需要在class前加上static

    static class CatType
    {
        static CatType()    //静态方法
        {

        }
    }

注意:

静态类中不能存在非静态成员(实例成员)

静态类不能实例化对象

4.静态总结

 

先有静态成员,后有实例成员;

后出现的可以调用先出现的;

先出现的不能调用后出现的。

 

 

 

 

 

 

 

 

 

 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页