C#一个类中静态(static)方法和动态方法有什么就区别了?

洋溢2020 2009-01-09 09:56:32
假如方法里面的内容都是 return int sum=a+b,感觉在不引用类中的动态成员时,静态动态方法都一样.相对于是否一个实例化上来说.
也就是说,类名.方法 可以运行的话.还是相对独立的一个方法 和 new 类名.方法一样.

区别难道就是是否能引用类中的静态或动态成员?






突然想下基础了
...全文
1899 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
iasktao 2009-12-10
  • 打赏
  • 举报
回复
方法不实例化占内存吗?
洋溢2020 2009-01-09
  • 打赏
  • 举报
回复
hdngo ,帅!

哦.一份方法代码的内存,用了执行..
HDNGO 2009-01-09
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 jackie2004 的回复:]
感觉根本上还是内存上的区别

静态方法多次执行 也是需要多次副本

静态成员就不同了 永远一个内存块了.
[/Quote]

方法占不占用更多内存,和它是不是static没什么关系。
因为字段是用来存储每个实例对象的信息的,所以字段会占有内存,并且因为每个实例对象的状态都不一致(至少不能认为它们是一致的),所以每个实例对象的所以字段都会在内存中有一分拷贝,也因为这样你才能用它们来区分你现在操作的是哪个对象。

但方法不一样,不论有多少个实例对象,它的方法的代码都是一样的,所以只要有一份代码就够了。因此无论是static还是non-static的方法,都只存在一份代码,也就是只占用一份内存空间。
同样的代码,为什么运行起来表现却不一样?这就依赖于方法所用的数据了。主要有两种数据来源,一种就是通过方法的参数传进来,另一种就是使用class的成员变量的值……

HDNGO 2009-01-09
  • 打赏
  • 举报
回复
误区一、 静态方法常驻内存,实例方法不是,所以静态方法效率高但占内存。

事实上,方法都是一样的,在加载时机和占用内存上,静态方法和实例方法是一样的,在类型第一次被使用时加载。调用的速度基本上没有差别。

误区二、 静态方法在堆上分配内存,实例方法在堆栈上。

事实上所有的方法都不可能在堆或者堆栈上分配内存,方法作为代码是被加载到特殊的代码内存区域,这个内存区域是不可写的。

误区三、 实例方法需要先创建实例才可以调用,比较麻烦,静态方法不用,比较简单。

事实上如果一个方法与他所在类型的实例无关,那么它就应该是静态的,决不会有人把它写成实例方法。所以所有的实例方法都与实例有关,既然与实例有关,那么创建实例就是必然的步骤,没有麻烦简单一说。实际上上你可以把所有的实例方法都写成静态的,将实例作为参数传入即可。

mawering 2009-01-09
  • 打赏
  • 举报
回复
mark
devilli 2009-01-09
  • 打赏
  • 举报
回复
學習
洋溢2020 2009-01-09
  • 打赏
  • 举报
回复
哦 .好的 ,好的.够用 好用就是了.
ls3697264 2009-01-09
  • 打赏
  • 举报
回复
學習
laoli_coding 2009-01-09
  • 打赏
  • 举报
回复
类的静态函数是在该类的范畴内的全局函数,不能访问类的私有成员,只能访问类的静态成员,不需要类的实例即可调用;实际上,它就是增加了类的访问权限的全局函数,静态成员函数可以继承和覆盖,但无法是虚函数.
非静态方法需要实例化,通过实例化的对象才能访问。
洋溢2020 2009-01-09
  • 打赏
  • 举报
回复
我对硬件不了解 ,内存可能是一种比喻
洋溢2020 2009-01-09
  • 打赏
  • 举报
回复
解释下啊 vrhero
vrhero 2009-01-09
  • 打赏
  • 举报
回复
静态方法 某种意思上说,算是一种实例,虽然不依赖类实例(其实就一个实例)

感觉根本上还是内存上的区别

静态方法多次执行 也是需要多次副本

静态成员就不同了 永远一个内存块了.
----------
你该去看书了...
洋溢2020 2009-01-09
  • 打赏
  • 举报
回复
感觉根本上还是内存上的区别

静态方法多次执行 也是需要多次副本

静态成员就不同了 永远一个内存块了.
洋溢2020 2009-01-09
  • 打赏
  • 举报
回复
看来我是想知道是否 实例的问题了 静态方法 某种意思上说,算是一种实例,虽然不依赖类实例(其实就一个实例)

静态方法的多次调用 还是多次方法 执行~~~ 动态了的感觉


哦 哦 哦
C_sdnElf 2009-01-09
  • 打赏
  • 举报
回复
学习.
zhnzzy 2009-01-09
  • 打赏
  • 举报
回复
这样的话我们把配置文件比如连接数据库的字符串放在静态方法里面读取,那么一次就可以了
zhnzzy 2009-01-09
  • 打赏
  • 举报
回复
静态方法很有用,比如一个类里面构造函数你用静态的了,然后用它来读取配置文件,那么你第2次以后访问该类就不需要再跑一遍代码了,效率提高了的
qimini 2009-01-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lovehongyun 的回复:]
尽管类的实例包含该类所有实例字段的单独副本,但每个静态字段只有一个副本。
不可以使用 this 来引用静态方法或属性访问器。
如果对类应用 static 关键字,则该类的所有成员都必须是静态的。
类(包括静态类)可以有静态构造函数。在程序开始和实例化类之间的某个时刻调用静态构造函数。

[/Quote]

感觉根本上还是内存上的区别
流年岁月 2009-01-09
  • 打赏
  • 举报
回复
领教了!
kimmking 2009-01-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lovehongyun 的回复:]
静态方法不依赖实例而实例方法必须依赖实例
[/Quote]


point
加载更多回复(8)

111,130

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧