C#静态static的用法

一、静态类

静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量。在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例化该静态类;其次,它防止在类的内部声明任何实例字段或方法。

静态类的主要特性

1:仅包含静态成员。

2:无法实例化。

3:静态类的本质,是一个抽象的密封类,所以不能被继承,也不能被实例化。

4:不能包含实例构造函数。

5:如果一个类下面的所有成员,都需要被共享,那么可以把这个类定义为静态类。

静态类与私有构造函数区别

1、私有构造器方式仍然可以从类的内部对类进行实例化,而静态类禁止从任何地方实例化类,其中包括从类自身内部。

2、使用私有构造器的类中,是允许有实例成员的,编译器不允许静态类有任何实例成员。

3、使用静态类的优点在于,编译器能够执行检查以确保不致偶然地添加实例成员,编译器将保证不会创建此 类的实例。

4、C#编译器会自动把它标记为sealed。这个关键字将类指定为不可扩展;换言之,不能从它派生出其他类。

二、静态变量

1、通过static关键字修饰,是属于类,实例成员属于对象,在这个类第一次加载的时候,这个类下面的所有静态成员会被加载。

2、静态成员只被创建一次,所以静态成员只有一份,实例成员有多少个对象,就有多少份。

3、类加载的时候,所有的静态成员就会被创建在“静态存储区”里面,一旦创建直到程序退出,才会被回收。

4、变量需要被共享的时候,方法需要被反复调用的时候,就可以把这些成员定义为静态成员。

5、在静态方法中,不能直接调用实例成员,因为静态方法被调用的时候,对象还有可能不存在。

6、this/base 关键字在静态方法中不能使用,因为有可能对象还不存在。

7、可以创建这个类的对象,制定对象的成员在静态方法中操作。

8、在实例方法中,可以调用静态成员,因为这个时候静态成员肯定存在。

9、非静态类可以包含静态的方法、字段、属性或事件;

10、无论对一个类创建多少个实例,它的静态成员都只有一个副本;

11、静态方法和属性不能访问其包含类型中的非静态字段和事件,并且不能访问任何对象的实例变量;

12、静态方法只能被重载,而不能被重写,因为静态方法不属于类的实例成员;

13、虽然字段不能声明为 static const,但 const 字段的行为在本质上是静态的。这样的字段属于类,不属于类的实例。

三、静态方法

静态方法是不属于特定对象的方法,

静态方法可以访问静态成员变量,

静态方法不可以直接访问实例变量,可以在实例函数调用的情况下,实例变 量做为参数传给静态方法。

静态方法也不能直接调用实例方法,可以间接调用,首先要创建一个类的实例,然后通过这一特定对象来调用静态方法。

四、静态构造函数

1:静态类可以有静态构造函数,静态构造函数不可继承;

2:静态构造函数可以用于静态类,也可用于非静态类;

3:静态构造函数无访问修饰符、无参数,只有一个 static 标志;

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

例如

C# 代码

 class Program

    {
        public static int i =0;
        public Program()
        {
            i = 1;
            Console.Write("实例构造方法被调用");
        }
        static Program()
        {
            i = 2;
            Console.Write("静态构造函数被执行");
        }
        static void Main(string[] args)
        {
            Console.Write(Program.i);//结果为2,首先,类被加载,所有的静态成员被创建在静态存储区,i=0,接着调用了类的成员,这时候静态构造函数就会被调用,i=2
            Program p = new Program();
            Console.Write(Program.i);//结果为1,实力化后,调用了实例构造函数,i=1,因为静态构造函数只执行一次,所以不会再执行。
        }
    }
时间: 2024-10-10 04:45:15

C#静态static的用法的相关文章

Java下static关键字用法详解

Java下static关键字用法详解 本文章介绍了java下static关键字的用法,大部分内容摘自原作者,在此学习并分享给大家. Static关键字可以修饰什么? 从以下测试可以看出, static 可以修饰: 1. 语句块 2. 成员变量(但是不能修饰局部变量) 3. 方法 4. 接口(内部接口) 5. 类(只能修饰在类中的类, 即静态内部类) 6. jdk 1.5 中新增的静态导入 那么static 修饰的表示什么呢? 当创建一个类时,就是在创建一个新类型,描述这个类的对象的外观和行为,除

Java中static的用法

static静态,作为修饰符,最初是由c引入,一开始static表示退出一个块后依然存在的局部变量.随后,static表示不能被其他文件访问的全局变量和函数.到了C++和java,static表示属于类且不属于类对象的变量和函数. 从具体用法来看,主要用到5个方面. 一.静态域. static修饰类的域(字段,成员变量),被static修饰的域在类中只有一个,它属于类,也称为类域.它只能被类操作,不能由对象操作.比如 pubic class Employee { private static i

ava下static关键字用法详解

Java下static关键字用法详解 本文章介绍了java下static关键字的用法,大部分内容摘自原作者,在此学习并分享给大家. Static关键字可以修饰什么? 从以下测试可以看出, static 可以修饰: 1. 语句块 2. 成员变量(但是不能修饰局部变量) 3. 方法 4. 接口(内部接口) 5. 类(只能修饰在类中的类, 即静态内部类) 6. jdk 1.5 中新增的静态导入 那么static 修饰的表示什么呢? 当创建一个类时,就是在创建一个新类型,描述这个类的对象的外观和行为,除

C++static关键字用法

一.static的作用有三种:限制变量或函数作用域.保持变量内容的持久.默认初始化为0 1.被static关键字修饰的全局函数或者变量具有文件作用域,即只在当前文件中可见. 2.被static修饰的变量会被存储在静态存储区,生命周期也为从定义直至程序结束.对于局部变量,即使在函数退出后该静态变量依然存在,然而却也无法访问.此外,static修饰的变量一生只会被初始化一次(这点经常被用作面试的小题,需注意). 3.正是因为被static修饰的变量会被存储在静态存储区,所以才有了这个一条.因为静态存

static 的用法

static 英文意思是 “静态的”. 在C 语言中,它用在 函数或变量前面. 1. 用在变量前面,它表示该变量是静态变量,意思是说,这个变量放在内存的静态区域,即使作用域结束,值也会一直保存着, 不会像变量那样,随作用域结束而释放所占的内存. static修饰的变量作用域有两种:1)修饰全局的变量,作用域在声明的文件中,其他文件不可调用. 2)修饰局部的变量,作用域在局部变量所在的函数中,其他函数不可见该变量. 2. 用在函数前,表示静态函数,不能被当前文件之外的其他文件调用. static

static的用法及作用

static可以用来修饰属性.方法和代码块.static修饰的变量属于这个类所有,既由这个类创建的所有对象共用一个static变量.通常把static修饰的属性和方法称为类属性(类变量).类方法.不使用static修饰的属性和方法属于单个对象,通常称为实例属性(实例变量).实例方法.使用static修饰方法的最常见的例子是我们熟悉的main()方法.下面通过一个示例学习是static的用法及使用static修饰属性和代码块,是如何分配内存空间的.代码示例如下: 运行结果如图所示: 从结果中可以得

Java中static关键字用法总结

1.     静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: · 它们仅能调用其他的static 方法. · 它们只能访问static数据. · 它们不能以任何方式引用this 或super. class Simple { static void go() { System.out.println("Welcome"); } } public class Cal { public static vo

PHP类的静态(static)方法和静态(static)变量使用介绍

PHP类的静态(static)方法和静态(static)变量使用介绍,学习php的朋友可以看下 在php中,访问类的方法/变量有两种方法: 1. 创建对象$object = new Class(),然后使用”->”调用:$object->attribute/function,前提是该变量/方法可访问. 2. 直接调用类方法/变量:class::attribute/function,无论是静态/非静态都可以.但是有前提条件: A. 如果是变量,需要该变量可访问. B. 如果是方法,除了该方法可访

路由基础(三)静态现网用法

一.静态路由用法简介 静态路由的用法使用 1)静态路由优先级方式进行选路,静态路由搭配动态路由进行选路. 2)静态路由搭配SLA检测链路. 3)静态路由打通内外网. 4)静态路由发布路由. 静态路由在现网中看视简单,但是使用却很灵活,可以结合以上几种方式进行使用. 1.1静态路由优先级选路(动态路由结合) 在一个小型的网络中使用静态路由很常见,当网络慢慢变大,变复杂之后静态路由很多时候需要进行选路.常用静态优先级(管理性距离)选路方式. 网络分为两条线路,一条主用线路,一条备用线路进行. 主用线