C#中静态的深入理解

一、静态成员

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

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

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

注:Person p;//这样实际上就已经被加载了。

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

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

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

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

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

二、静态成员和实例成员的区别

1、生命周期不一样。

2、在内存中存储的位置不一样。

三、静态类

1、被static关键字修饰的类。

2、静态类里面只能声明静态成员。

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

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

四、静态构造函数

1、这个类的成员,第一次被访问之前,就会执行静态构造函数。

2、静态构造函数只被执行一次。

Eg:

代码如下:

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,因为静态构造函数只执行一次,所以不会再执行。
        }
    }

(0)

相关推荐

  • C#静态变量与实例变量实例分析

    本文实例讲述了C#静态变量与实例变量的具体用法,分享给大家供大家参考.具体分析如下: 1)在语法定义上的区别: 类变量也叫静态变量,静态变量前要加static关键字,而实例变量前则不加: 实例变量也叫对象变量,即没加static 的变量: 2)在程序运行时的区别: 实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量.静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态

  • c# static 静态数据成员

    ① 静态成员属于类所有,非静态成员属于类的实例所有. ② 每创建一个类的实例,都市在内存中为非静(动)态成员新分派一块存储: 静态成员属于类所有,为各个类的实例所公用,无论类创建了几多实例,类的静态成员在内存中只占同一块区域. 静态数据成员区别于动态数据成员,静态变量并不是稳定的,只是静态变量在声明的时候不管有没有赋值,都市凭据它的类型分派对应的内存空间,他的可访问性和作用区间与动态变量是一样的 ==================================================

  • C#静态static的用法实例分析

    本文实例讲述了C#静态static的用法,分享给大家供大家参考.具体用法分析如下: 一.静态类 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量.在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例化该静态类:其次,它防止在类的内部声明任何实例字段或方法. 静态类的主要特性: 1:仅包含静态成员. 2:无法实例化. 3:静态类的本质,是一个抽象的密封类,所以不能被继承,也不能被实例化. 4:不能包含实例构造

  • C#中实现抽象类里建立静态方法

    本文简述了C#中实现抽象类里建立静态方法的解决办法,示例程序如下: public class TestMain { public static void main(String[] args) { AbstractTest.out(); } } 如上面所示的程序是可以运行的. 一般情况下抽象类中可以包含抽象方法和非抽象方法,静态类中只能包含静态成员,所有的静态成员也只能包含在静态类中. 因为静态static的本质是包含abstract和sealed的,所以静态方法可以包含在抽象类中,并通过抽象类

  • C#静态方法与非静态方法实例分析

    本文实例分析了C#静态方法与非静态方法,并对其用法进行了较为全面的分析.分享给大家供大家参考.具体分析如下: 通常来说,C#的类中可以包含两种方法:静态方法和非静态方法. 使用了static 修饰符的方法为静态方法,反之则是非静态方法. 静态方法是一种特殊的成员方法,它不属于类的某一个具体的实例,而是属于类本身.所以对静态方法不需要首先创建一个类的实例,而是采用 类名.静态方法 的格式 . 1)static方法是类中的一个成员方法,属于整个类,即不用创建任何对象也可以直接调用. static内部

  • C# 静态变量与静态方法实例研究

    程序如下: 复制代码 代码如下: public static string 英汉(string english,翻译结果 一个或多个) { string 英汉辞典 = Settings.Default.辞典所在目录+"haou_dict.xml"; try { if (File.Exists(英汉辞典)) { XDocument dictionary = XDocument.Load(英汉辞典); var query = from p in dictionary.Descendants

  • C#中static静态变量的用法实例

    本文实例讲述了C#中static静态变量的用法.分享给大家供大家参考.具体如下: 使用 static 修饰符声明属于类型本身而不是属于特定对象的静态成员static修饰符可用于类.字段.方法.属性.运算符.事件和构造函数,但不能用于索引器.析构函数或类以外的类型   静态全局变量 定义:在全局变量前,加上关键字 static 该变量就被定义成为了一个静态全局变量. 特点: ① .该变量在全局数据区分配内存. ② .初始化:如果不显式初始化,那么将被隐式初始化为0.   静态局部变量 定义:在局部

  • c# static的全部用法收集整理

    static的全部用法     要理解static,就必须要先理解另一个与之相对的关键字,很多人可能都还不知道有这个关键字,那就是auto,其实我们通常声明的不用static修饰的变量,都是auto的,因为它是默认的,就象short和long总是默认为int一样:我们通常声明一个变量:     int a;     string s;     其实就是:     auto int a;     auto string s;     而static变量的声明是:     static int a;

  • 学习C#静态函数及变量的一个精典例子与代码

    (1)用于对静态字段.只读字段等的初始化.                (2)添加static关键字,不能添加访问修饰符,因为静态构造函数都是私有的.          (3)类的静态构造函数在给定应用程序域中至多执行一次:只有创建类的实例或者引用类的任何静态成员才激发静态构造函数  (4)静态构造函数是不可继承的,而且不能被直接调用.              (5)如果类中包含用来开始执行的 Main 方法,则该类的静态构造函数将在调用 Main 方法之前执行.任何带有初始值设定项的静态字

  • C#中静态构造函数的几点说明介绍

    静态构造函数是C#的一个新特性,其实好像很少用到.不过当我们想初始化一些静态变量的时候就需要用到它了.这个构造函数是属于类的,而不是属于哪里实例的,就是说这个构造函数只会被执行一次.也就是在创建第一个实例或引用任何静态成员之前,由.NET自动调用. 复制代码 代码如下: class SimpleClass{// Static constructorstatic SimpleClass(){//}} 在使用静态构造函数的时候应该注意几点: 1.静态构造函数既没有访问修饰符,也没有参数.因为是.NE

随机推荐