C#静态类

来源:互联网 发布:农村淘宝 广告 编辑:程序博客网 时间:2024/06/05 06:03

C#静态类

++静态成员

++++静态成员变量是和类相关关联的,可以作为类中“共”有的变量(是一个共性的表现),静态成员不依赖特定对象的存在,访问的时候通过类来操作的。

++++静态成员使用static关键字修饰。

++++例如:

public class Dog{

    public static string type =Dog;

    public static void WatchDoor(){

        Console.WriteLine(狗会看门);

}

}

++++访问静态成员采用类名加点操作加静态成员。

例如:

Console.WriteLine(Dog.type = {0}, Dog.type);

Dog.WatchDoor();

//打印结果为:Dog.type = Dog;狗会看门;


++静态方法与实例方法的访问权限表

               静态成员变量    静态方法    实例成员变量     实例方法

静态方法   直接访问        直接访问    不可以直接访问   不可直接访问

实例方法   直接访问        直接访问    直接访问         直接访问


++静态成员的特点

++++1、静态成员随着类的加载而加载,无论对一个类创建多少个实例,静态成员都只有一个副本。

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

++++3、静态成员由类名通过点语法调用,非静态成员是由对象来调用。

++++4、静态方法只能访问静态成员,包括静态成员变量和静态方法;实例方法可以访问实例成员变量与实例方法,也可以访问静态成员。


++静态类的介绍

++++静态类用于创建无需创建类的实例就能访问的数据和函数,静态类只能包含静态成员,不可以包含非静态成员。静态成员用于分离独立任何对象标识的数据和行为: 无论对象发生任何改变,这些数据和函数都不会随之变化。

++++静态类使用static关键字修饰

    格式:类修饰符 static类名{静态成员}

++++例如: 简单的数学运算不依赖任何对象,所以我们可以将其定义为静态类。

staticclass Mathf{

    publicstaticstring mainFunc =简单数学运算;

    

    //静态类当中还可以定义const修饰的常量

    publicconstint defaultValue = 0;

 

    //求绝对值

    publicstaticint Abs(intvalue){

        returnvalue > 0 ? value : -value;

}

 

//求两个整数当中的最小值

publicstaticint MinValue(intnumA,intnumB){

    returnnumA > numB ? numB : numA;

}

}

 

--使用静态类Mathf:

Console.WriteLine(Mathf功能是:{0}, Mathf.mainFunc);

int absValue = Mathf.Abs(-10);

int minValue = Mathf.MinValue(20, 30);

--结果为:absValue = 10, minValue = 20

--注意: 访问静态类中的成员同样使用类名加点操作加静态成员的方式。


++静态类特征

++++1、静态类只能包含静态成员,不能包含非静态成员。

++++2、静态类无法实例化。

++++3、静态类是密封的,无法被继承。

++++4、静态不能包含有实例构造函数。


++静态构造函数

++++静态类不能有实例化构造函数,但是可以有静态构造函数。静态构造函数用于初始化任何静态数据或用于执行仅需要执行一次的特定操作。

++++格式:static类名(){  //初始化静态数据或执行其他操作

}

++++例如:

static Math(){

    Console.WriteLine(这是Mathf的静态构造函数);

}

++++静态构造函数同样存在非静态类当中,在非静态类当中除了可以声明实例构造函数也可以声明静态构造函数:

class Hero{

    public Hero(string name, int HP, string type){ //实例构造函数

        this.name = name;

        this.HP = HP;

        this.type = type;

}

staticHero(){

    Console.WriteLine(Hero类的静态构造函数);

}

}


++静态构造函数调用

++++静态构造函数无法像实例构造函数那样通过某一个关键字调用。静态构造函数不可被直接调用,当创建类实例或引用任何静态成员之前,静态构造函数会被调用。比如访问静态类Mathf当中的mainFunc或是创建非静态类Hero实例都会调用类中的静态构造函数。


++静态构造函数特征

++++1、静态构造函数是固定格式,不能有修饰符,不能带任何参数。

++++2、一个类只能有一个静态构造函数,即静态构造函数不可以重载。

++++3、静态构造函数不可被直接调用,当创建类实例或引用任何静态成员之间,静态构造函数会被自动调用,并且只执行一次。

++++4、一个类的静态构造函数在它的所有派生类的静态构造函数执行之后执行。


##静态的拓展: 单例设计模式

++单例模式

++++对于系统中某些类来说,只有一个实例很重要,例如,一个系统中可能存在多个打印任务,但是只能有一个正在工作的任务。 针对这种情况如果某个类只能有一个实例那么则满足我们的需求,我们将满足某个类只有一个实例的代码设计方式称为单例模式。

++++单例模式的三要点:

  --1)某个类只能有一个实例。

  --2)必须自行创建这个实例。

  --3)必须自行向外界提供这个实例。

++单例模式实现步骤

++++1、默认构造使用private修饰。

++++2、内建该类的静态实例。

++++3、静态构造方法中给该静态实例做初始化。

++++4、对外提供获取该静态实例的方法。


++单例模式代码实现步骤

 

public class SingleTon{

private SingleTon(){} //构造方法必须私有化

privatestaticSingleToninstance; //定义静态实例

 

staticSingleTon(){ //静态构造函数中对静态实例进行初始化

    instance = new SingleTon();

}

 

publicstaticSingleTon Instance{  //对外提供获取该实例的接口

    get{

        if(instance == null){

            instance =new SingleTon();

}

returninstance;

}

}

}


++单例的使用

++++可通过在单例中定义变量name的方式来测试我们单例是否符合要求。所以我们在SingleTon中定义公共字段name后。

SingleTon singleTonA = SingleTon.Instance;

singleToA.name =SingleTon;

SingleTon singleTonB = SingleTon.Instance;

Console.WriteLine(singleTonB.name);

//打印结果singleTonB.name =SingleTon

++++通过多个实例获取到的字段值都为一致说明其实都为同一个实例,该代码设计符合单例模式要求。


++单例的作用

++++单例模式是资源管理的必备模式,单例类只有一个实例对象,因此可以通过该实例对象获取到管理的资源。

++++单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。

++++因为类控制了实例化过程,所以类可以灵活更改实例化过程。

++++单例类能够节省大量创建对象的过程,从而节省内存开销。


--_--VRunSoft:lovezuanzuan--_--