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

转载于:https://www.cnblogs.com/sidecore/archive/2012/11/30/2796930.html

C# 静态变量及静态函数相关推荐

  1. static的三种用法,定义静态变量,静态函数,静态代码块!

    static的三种用法,定义静态变量,静态函数,静态代码块! 1.定义静态变量 class PersonStatic { //静态变量的特点 //1.静态变量无需生成对象就可被调用,可以使用类名和对象 ...

  2. 用汇编的眼光看C++(之类静态变量、静态函数)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 看过设计模式的朋友都知道,我们在设计单件模式的时候离不开类的静态函数.和类的成员变量不同,类的 ...

  3. c/c++静态变量和静态函数

    c语言中 c语言中需要内存来存放数据.而内存主要分为两类:静态存储区和动态存储区; 静态存储区分为:只读数据(READONLY DATA)区.以读写数据(RW DATA)区.未初始化区(BSS).它们 ...

  4. C语言中的静态变量和静态函数

    C中的静态变量 基本上,声明静态变量时,它们仅创建它们的单个副本,也称为类变量 .它们保留在相应范围内分配的值,并且不会在其新范围内再次初始化变量. 静态变量在代码执行期间保留在内存空间中. 静态变量 ...

  5. JS静态变量和静态函数

    function A(){this.id = "我是AA"} // 在构造函数外定义的都是所有对象共享的 A.id = "我是A"; A.sayId = fun ...

  6. java静态函数_(基础)java中的静态变量与静态函数Static

    静态static 静态出现最大的原因:节约内存,只存一份,由对象共享这个属性. 静态的作用是什么? 场景: 当每个对象都有一个相同的属性,如country="China",那么每个 ...

  7. c语言c++语言中静态变量,函数详解

    静态变量,静态函数对于一些c,c++的初学者来说,造成了不少的困扰.昨晚和寝室的室友讨论到这 个问题,想了一下,作了一下总结: 虽然说c和c++在很多人的眼里就是孪生姐妹,其实还是有很大区别的.在这里 ...

  8. 类模板,多种类型的类模板,自定义类模板,类模板的默认类型,数组的模板实现,友元和类模板,友元函数,类模板与静态变量,类模板与普通类之间互相继承,类模板作为模板参数,类嵌套,类模板嵌套,类包装器

     1.第一个最简单的类模板案例 #include "mainwindow.h" #include <QApplication> #include <QPush ...

  9. c语言静态函数调用静态变量_C语言中的静态变量和函数

    c语言静态函数调用静态变量 C中的静态变量 (Static Variables in C) Basically, when static variables are declared, they cr ...

  10. C语言 static静态变量

    静态变量类型说明符是static.静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在 静态存储区内分配存储单元),该区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都 ...

最新文章

  1. 2020-11-13size_t和int
  2. 用C语言解“二分法求多项式单根”题
  3. C# - 在foreach中删除元素
  4. 曝光原理_简单摄影之一 曝光原理
  5. Wargame.kr_Web:already got
  6. 请输入星期的第一个字母c语言,C语言经典案例:请输入星期几的第一个字母来判断一下是星期几,...
  7. python 目录下的文件_用python把文件夹下的所有文件包括文件夹里面的文件都拷贝到同一个目录下...
  8. d3.js 搭建 d3-force-directed-graph 例子
  9. Pycharm 字体大小及背景颜色的设置
  10. h5正则表达式_正则表达式需要5天才能运行。 因此,我构建了一个可以在15分钟内完成操作的工具。...
  11. vue.js axios实现跨域http请求接口
  12. docker 数据卷 mysql_Docker 入门教程(五)数据卷 Volumes
  13. 【leetcode 简单】第四十一题 Excel表列序号
  14. 浏览器自动转换URL编码产生乱码问题
  15. java图书购买系统的项目_JAVA入门第三季项目(图书查找系统)
  16. 4×4键盘板:ATMEGA328接口
  17. 五分钟上手ECharts教程
  18. 数字信号处理原理及实现一书的思维导图
  19. [数字媒体] PR视频剪辑之竖屏实现横屏旋转切换和大视频文件缩小
  20. 我是如何拿到蚂蚁金服实习 offer 的

热门文章

  1. 第三届网络安全冬训营“朔雪飞扬”在哈尔滨开幕
  2. apollocaffe编译问题
  3. 从命令行安装IIS 7.0
  4. windows时间设置
  5. spring mvc入门案例
  6. [Android] 环境配置之正式版Android Studio 1.0
  7. 机器学习:使用matlab的fminunc+正则化实现二元逻辑回归
  8. HDU1846 Brave Game
  9. js高级学习笔记(b站尚硅谷)-5-回调函数
  10. mysql游戏调整等级_mysql求游戏排名