zoukankan      html  css  js  c++  java
  • C# 静态变量及静态函数

    静态变量使用 static 修饰符进行声明,在类被实例化时创建,通过类进行访问不带有 static 修饰符声明的变量称做非静态变量。

    static变量在对象被实例化时创建,通过对象进行访问一个类的所有实例的同一C#静态变量都是同一个值,同一个类的不同实例的同一非静态变量可以是不同的值。

    静态函数的实现里不能使用非静态成员,如非静态变量、非静态函数等。

     1 class Dogs
     2 {
     3     //静态成员,狗的数量
     4     public static int Count =0;
     5       //非静态成员,狗的名称
     6     public string Name;
     7     //创建一条狗,数量加1
     8     public Dogs()
     9     {
    10         Count++;
    11     }
    12     //静态方法,只能访问静态字段
    13    public static int GetCount()
    14     {
    15         //string nm = this.Name;        //错误,不能访问非静态成员
    16        return Count;
    17     }
    18 }
    19 
    20 class Program
    21 {
    22     static void Main(string[] args)
    23     {
    24         System.Console.WriteLine("Dogs.Count={0}",Dogs.Count);
    25     Dogs aDog = new Dogs();
    26         System.Console.WriteLine("Dogs.Count={0}",Dogs.Count);
    27       //直接通过类名调用静态成员
    28     Dogs.Count=5;
    29         System.Console.WriteLine("Dogs.Count={0}",Dogs.Count);
    30         Dogs bDog =new Dogs();
    31          //调用静态成员函数
    32       System.Console.WriteLine("Dogs.Count={0}",Dogs.GetCount());
    33         //aDog.GetCount();        //错误,静态成员只能通过类名访问。
    34     }
    35 }

    运行结果:

    Dogs.Count = 0

    Dogs.Count =1

    Dogs.Count =5

    Dogs.GetCount() =6

    静态类:

    声明为static,它仅包含静态成员,不能用new静态类的实例。使用静态类来包含不与特定对象关联的方法。

    功能:仅包含静态成员,不能被实例化,是密封的,不能包含实例构造函数,可包含静态构造函数以分配初始值或设置某个静态变量。

    优点:编译器能够执行检查以确保不致偶然地添加势力成员。编译器将保证不会创建此类的实例。

    静态方法:

    是一种特殊的成员方法,不属于类的某一个具体的实例。非静态方法可以访问类中的任何成员,而静态只能访问类中的静态成员。

    静态构造函数:

    • 用于对静态字段、只读字段等的初始化。              
    • 添加static关键字,不能添加访问修饰符,因为静态构造函数都是私有的。      
    • 类的静态构造函数在给定应用程序域中至多执行一次:只有创建类的实例或者引用类的任何静态成员才激发静态构造函数
    • 静态构造函数是不可继承的,而且不能被直接调用。            
    • 如果类中包含用来开始执行的 Main 方法,则该类的静态构造函数将在调用 Main 方法之前执行。任何带有初始值设定项的静态字段,则在执行该类的静态构造函数时,先要按照文本顺序执行那些初始值设定项。  
    • 如果没有编写静态构造函数,而这时类中包含带有初始值设定的静态字段,那么编译器会自动生成默认的静态构造函数。

    C#静态方法及属性在程序启动的时候,就全部装入内存的,而不管这些方法、属性以后有没有用到。即使是没有人再访问程序,这部分内存仍然不会释放还有就是,所有访问者看到的静态属性的数据几乎都是一样的,比如A用户设置了UserName这个属性,B用户访问的时候,得到的UserName仍然是A用户设置的那个。这种特性,如果用在固定数据中,那不会有太大问题,比如连接字符串之类的

    C#静态方法/数据成员是属于类的,不是属于某一个对象的,因而调用它不需要实例化;静态方法和静态数据成员相当于共享变量。为该类的所有对象所共有,因而在需要共享数据时,定义这种类型时很好的选择。 一但定义一个类后(不一定要实例化对象)该类的所有静态成员就载入内存(并不是程序启动,就装入内存,没有定义该类时它不会载入内存) 静态成员的作用域与它所属的类的作用域相同

  • 相关阅读:
    Eclipse中添加MyEclipse插件
    用GWT开发的HelloGWT程序
    GWT module 'xxx' may need to be (re)compiled解决办法
    GWTDesigner_v5.1.0破解码
    Firefox火狐广告过滤插件Adblock Plus过滤规则包[中文维护小组]
    工程师们,不要想一辈子靠技术混饭吃
    PHP生成类似类似优酷、腾讯视频等其他视频链的ID
    (外挂破解)Cheat Engine(内存修改工具)V6.2中文版软件介绍
    ucos-ii核心算法分析(转)
    Websocket,ProtoBuffer,Hightlight,JSON 等,最近遇到的一些知识点小结
  • 原文地址:https://www.cnblogs.com/sidecore/p/2796930.html
Copyright © 2011-2022 走看看