C#中静态方法和非静态方法的区别是什么

2023-05-13 61776 日常教程

这篇文章给大家介绍C#中静态方法和非静态方法的区别是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

静态方法和非静态方法的区别:

  1.静态方法不需要类实例化就可以调用,反之非静态方法需要实例化后才能调用;

  2.静态方法只能访问静态成员和方法,非静态方法都可以访问;

  3.静态方法不能标记为override,导致派生类不能重写,但是可以访问;

  4.静态成员是在第一次使用时进行初始化。非静态的成员是在创建对象的时候,从内存分配上来说静态是连续的,非静态在内存的存储上是离散的,因此静态方法和非静态方法,在调用速度上,静态方法速度一定会快点,因为非静态方法需要实例化,分配内存,但静态方法不用,但是这种速度上差异可以忽略不计 

何时用静态方法,何时用实例方法:

  1.一个方法和他所在类的实例对象无关,不依赖new出来的实例,那么它就应该是静态的

  2.不需要面向对象的理念的时候用静态;比如动物-> RUN ,因为你可能会扩展出猫 run、狗 run,这时候就需要用非静态的方法

关于线程安全:

  静态方法只有一个实例,当有静态变量的时候,对于高并发的时候,并发的所有执行都走那个方法,静态变量的值就会发生改变,导致出现问题;

  当然并发不安全跟方法本身没关系,跟共享的那个资源有关系比如某个变量,每个线程都对其进行操作,都能改变其值,多线程(并发其实就是多线程),操作它,其值混乱,就有问题了 

为什么要用非静态方法

  这是本人写的一个方法,当初直接写成static方法,没有别人的原因,是因为不想实例化可以少些一行代码,并没有想过静态和非静态的区别= =!~~;当然写成非static的方法也是可以的;

  原因

  1.因为方法需要重复的调用,每次都去new一次会造成内存的开销,使用静态的方法就会一直在内存中,不需要重新new一块空间初始化数据;

  2.不需要去做OO;

  3.方法不依赖new出来的内容;

  比较经典的static方法,DBHelp里面基本上都是static方法

关于C#中静态方法和非静态方法的区别是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

vue-electron中如何修改表格内容和样式

今天小编给大家分享的是vue-electron中如何修改表格内容和样式,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。需求将表格导入并向其添加内容,然后导出表格,且表格样式(一般是值宽高合并颜色等)不能改变。技术electronxlsxxlsx-stylenode-xlsxyarn add xlsx yarn a...

C语言中pthread_exit()函数实现终止线程的方法

本篇文章和大家了解一下C语言中pthread_exit()函数实现终止线程的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。多线程编程中,线程结束执行的方式有3种,分别是:线程将指定函数体中的代码执行完后自行结束;线程执行过程中,被同一进程中的其它线程(包括主线程)强制终止;线程执行过程中,遇到pthread_exit()函数结束执行。注意,默认属性的线程执行结束后并不会立即...

如何快速上手MMdnn

这篇“如何快速上手MMdnn”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何快速上手MMdnn”文章吧。MMdnn是微软开源的一套帮助用户在不同深度学习框架之间进行互操作的工具,包括模型转换和可视化。目前支持在Caffe、Keras、MXNet、Tensorflow、CNTK、Py...

怎么实现MainStarter

本篇内容主要讲解“怎么实现MainStarter”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么实现MainStarter”吧!Quartz触发器配置从触发器中配置一个通用触发MainStarter<bean id="mainStarter" class="com.zb.timer.MainSt...

怎么在.NET Core中配置多环境

怎么在.NETCore中配置多环境?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。方式一:预编译指令DEBUG#if DEBUG       //读取环境1配置文件 #else       //读取环境2配置...

怎么解决FireFTP中文乱码问题

怎么解决FireFTP中文乱码问题,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。FireFTP是一个Firefox浏览器插件,用Firefox浏览器的人肯定知道,但是在用的时候偶尔出现FireFTP中文乱码,很烦人,我带大家看看怎么样去解决掉他。安装完后发现FTP中的中文不能正常显示,现给出解决办法:点左上角的编辑->高级-&g...

.net 页面怎么指定区域打印

这篇文章主要讲解了“.net页面怎么指定区域打印”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“.net页面怎么指定区域打印”吧! 使用CSS,定义一个.noprint的class,将不打印的内容放入这个class内。详细如下:复制代码代码如下:<stylemedia=printtype="text/css">.nop...

leetcod如何实现比特位计数

小编给大家分享一下leetcod如何实现比特位计数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、题目内容给定一个非负整数 num。对于 0≤i≤num范围中的每个数字 i ,计算其二进制数中的1的数目并将它们作为数组返回。示例1:输入:2输出:[0,1,1]示例 2:...