C#的类中可以包含两种方法:C#静态方法与非静态方法。那么他们的定义有什么不同呢?他们在使用上会有什么不同呢?

让我们来看看最直观的差别:使用了static 修饰符的方法为静态方法,反之则是非静态方法。

比较一、C#静态成员:

静态成员属于类所有,非静态成员属于类的实例所有。

每创建一个类的实例,都会在内存中为非静态成员新分配一块存储;静态成员属于类所有,为各个类的实例所公用,无论类创建了多少实例,类的静态成员在内存中只占同一块区域。

比较二、C#静态方法

C#静态方法属于类所有,类实例化前即可使用。

非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员。因为静态方法在类实例化前就可以使用,而类中的非静态变量必须在实例化之后才能分配内存,这样,C#静态方法调用时无法判断非静态变量使用的内存地址。所以无法使用。而静态变量的地址对类来说是固定的,故可以使用。

比较三、C#静态方法是一种特殊的成员方法

它不属于类的某一个具体的实例,而是属于类本身。所以对静态方法不需要首先创建一个类的实例,而是采用类名.静态方法的格式 。

static内部只能出现static变量和其他static方法!而且static方法中还不能使用this....等关键字..因为它是属于整个类!

静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁。

静态方法和静态变量创建后始终使用同一块内存,而使用实例的方式会创建多个内存。

比较四、C#静态方法中获取类的名称

静态方法中用:

string className =   System.Reflection.MethodBase. GetCurrentMethod().ReflectedType.FullName;

非静态方法中还可以用:

string className = this.GetType().FullName; 
使用静态得准则就是:1.保证不会产生并发。2. 在方便快捷和开发难度上做一个衡量

******--------------------------------*********--------------------------------******

那么C#什么时候该使用静态类呢?

判断这个很简单,就是从内存的优化方面去考虑.因为静态和非静态的不同的地方,就是静态的从程序一启动就会一直占用内存,而非静态的只在使用后(实例化)后才会占用内存.但是每实例化个一个对象时又会另外占用内存. 举个例子,比如说一个数据库的连接字段(STRING).因为要经常使用到它,这时我们可以用STATIC.但是如果这时用非静态的话那就不合算了,因为每次调用到它时,又实例化一次.这样相比来说占用内存就比较大了.不划算.  像一个登录后台的方法,你只在登陆时候调用一次,就没有必要做成静态的了.那样一直驻存在内存中.在大型项目中,你如果都使用静态的那得要多少内存去支撑呀.

总之就是它经常要被调用时,就用静态的.相反则用非静态的.

******--------------------------------*********--------------------------------******

再者,说一下C#静态字段的两个用处:

静态字段的2个常用方法

(1)记录已实例化的对象的个数

(2)存储必须在所有实例化之间共享的值

  

(1)记录已实例化的对象的个数

现在某个培训机构啊,要开设一个学理发的班,计划招5人,只要人数够5人就开班。

但是这个学生是一个一个来的,不可能一下子就把5个人招满了。

那么招第一个人,学生总数就是1,再招两个人,那学生总数就是3了,也就是说学生总人数是变化的,这个学生总数就需要声明为静态字段,因为静态字段实例化只会在内存里使用同一块区域(只不过存储的值变化罢了)。如果声明为实例成员,那就麻烦了,需要开辟5个内存空间,尼玛真有钱啊!

(2)存储必须在所有实例化之间共享的值

现在开班了,班里老师只有一个,叫唐僧。班里的五个人都知道老师叫唐僧(也就是说老师这个字段是共享的 哦)。但是某一天唐僧要去女儿国走丈母娘家了,课不能停呀。所以就请观音姐姐过来带一段课。

现在5个学生都知道 老师换成 观音姐姐了,都很激动哈。但是她们是怎么都知道换老师的呢?还是这个静态字段的功劳,将 老师姓名声明为静态字段,这个字段是共享的。所以该类的属性都能知道。

废话不多说,直接上代码;

补充——使用const关键字创建静态字段:

用const关键字声明的字段称为常亮字段,是一种特殊的静态字段,它是永远不能改变的。关键字const是constant常量的简称,const字段虽然也是静态字段,但是不用static关键字,只有数字类型、字符串类型和枚举类型的字段才能声明为const字段。例如Math类中的PI就被声明成了Const字段。

c#_static静态相关推荐

  1. node 微信授权 获取openid

    node获取微信授权拿到openid 需要了解的网站   1.微信授权. 先说一下流程(一张图代替所有): 流程步骤: 1.用户同意,获取code. 2.通过code获取网页授权access_toke ...

  2. Sphinx 初始化项目

    Welcome to the Sphinx 1.5.6 quickstart utility.Please enter values for the following settings (just ...

  3. 【小沐学Python】Python实现在线电子书(Sphinx + readthedocs + github + Markdown)

    文章目录 1.简介 2.安装 3.创建测试工程 4.项目文件结构 5.编译为本地文件 6.编译为http服务 7.更改样式主题 8.支持markdown 9.修改文档显示结构 10.项目托管到gith ...

  4. Java. Static 修饰类_static 表示静态,它可以修饰属性,方法和代码块。

    (1)static 表示静态,它可以修饰属性,方法和代码块. 1.static修饰属性(类变量),那么这个属性就可以用类名.属性名来访问,也就是使这个属性成为本类的类变量,为本类对象所共有.这个属性就 ...

  5. [Swagger] Asciidoc 配置静态章节

    目录 Asciidoc 配置静态章节 MAVEN 静态章节配置 MAVAN命令切换输出方式 Asciidoc InteillJ IDEA Plugin REFRENCES 更多 Asciidoc 配置 ...

  6. opencv4android编译静态库,Android Studio链接OpenCV静态库

    目前我正在开发一个使用OpenCV3进行实时视频处理(应用一组彩色滤镜)的项目,我设法让它与 Java一起使用而没有任何问题. 我接下来要做的是通过NDK将所有Java逻辑实现到C(以提高性能).这样 ...

  7. 发送快递:配置静态路由

    背景 基础组网,比如现在要实现相互通信,通过两台计算机来检测是否互通,但是它们中间通过一些路由器相互连接,这个时候,你要考虑,怎么配置这些路由器,包括给pc配地址,给路由器配地址,怎么定义这些网段! ...

  8. SpringBoot-web开发(一): 静态资源的导入(源码分析)

    目录 方式一:通过WebJars 1. 什么是webjars? 2. webjars的使用 3. webjars结构 4. 解析源码 5. 测试访问 方式二:放入静态资源目录 1. 源码分析 2. 测 ...

  9. MindSpore静态图语法支持

    MindSpore静态图语法支持 概述 在Graph模式下,Python代码并不是由Python解释器去执行,而是将代码编译成静态计算图,然后执行静态计算图. 关于Graph模式和计算图,可参考文档: ...

最新文章

  1. R语言ggplot2可视化在分面图(facet_grid)的条形图上添加计数(count)或者百分比(percent)标签实战
  2. wpf采用Xps实现文档显示、套打功能
  3. [Python正则表达式] 字符串中xml标签的匹配
  4. IO设计模式:Reactor和Proactor对比
  5. 计算机网络协议(一)
  6. php获取表单后如何保存到数据库中,php – 如何将数据从HTML表单保存到WordPress中的数据库表?...
  7. 2018年1月 常用的linux命令
  8. [SharePoint]如何防止从代码跳到“拒绝访问”页面
  9. 隐马尔可夫模型,最大熵马尔可夫模型和条件随机场的区别与联系
  10. Html前端基础(select下拉选标签、table表格标签)
  11. 如何使用SQL Server数据库实验助手(DEA)工具
  12. 什么是反馈电路?反馈有什么作用?
  13. 各项数字技术的发展历程
  14. “你好,世界!” Python教程
  15. CCF系列题解--2015年3月第三题 节日
  16. 公司电子企业邮箱注册哪个好,电子企业邮箱怎么写?
  17. 家居行业渠道商销售系统线上线下一体化运作,促进产品更新迭代
  18. nRF24L01+不能接收或接收偶尔异常等问题实战分享
  19. Git提交后,文件夹任然有红色叹号提示
  20. RuntimeError: PytorchStreamReader failed locating file data.pkl: file not found

热门文章

  1. FPGA 中 IO 口时序分析(Input Delay /output Delay)
  2. zabbix3.2自动发现批量监控redis端口状态
  3. 想学Python有没有必要报班?
  4. gradle zip task 排除文件
  5. VS asp.net 连接64位oracle 11g
  6. 网络之XML解析-原生
  7. RIA Service + dataformc操作例子
  8. 深入python3 (Dive Into Python 3) 在线阅读与下载
  9. 1231. The Embarrassed Cryptography
  10. iPhone 利用CG API画一个饼图(Pie chart)