社区
C#
帖子详情
C#一个类中静态(static)方法和动态方法有什么就区别了?
洋溢2020
2009-01-09 09:56:32
假如方法里面的内容都是 return int sum=a+b,感觉在不引用类中的动态成员时,静态动态方法都一样.相对于是否一个实例化上来说.
也就是说,类名.方法 可以运行的话.还是相对独立的一个方法 和 new 类名.方法一样.
区别难道就是是否能引用类中的静态或动态成员?
突然想下基础了
...全文
1899
29
打赏
收藏
C#一个类中静态(static)方法和动态方法有什么就区别了?
假如方法里面的内容都是 return int sum=a+b,感觉在不引用类中的动态成员时,静态动态方法都一样.相对于是否一个实例化上来说. 也就是说,类名.方法 可以运行的话.还是相对独立的一个方法 和 new 类名.方法一样. 区别难道就是是否能引用类中的静态或动态成员? 突然想下基础了
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
c#
_
static
静态
C#
的
类中
可以包含两种
方法
:
C#
静态
方法
与非
静态
方法
。那么他们的定义有什么不同呢?他们在使用上会有什么不同呢? 让我们来看看最直观的差别:使用了
static
修饰符的
方法
为
静态
方法
,反之则是非
静态
方法
。 比较一、
C#
静态
成员:
静态
成员属于类所有,非
静态
成员属于类的实例所有。 每创建
一个
类的实例,都会在内存中为非
静态
成员新分配一块存储;
静态
成员属于类所有,为各个类的实例所公用,无论类创建了多少实例,类的
静态
成员在内存中只占同一块区域。 比较二、
C#
静态
方法
C#
静态
方法
属于类所有,类实例化前即可
C#
中
静态
与非
静态
方法
区别
与使用
C#
静态
方法
与非
静态
方法
的
区别
不仅仅是概念上的,那么他们有什么具体的
区别
呢?让我们通过本文向你做一下解析。
C#
的
类中
可以包含两种
方法
:
C#
静态
方法
与非
静态
方法
。那么他们的定义有什么不同呢?他们在使用上会有什么不同呢? 让我们来看看最直观的差别:使用了
static
修饰符的
方法
为
静态
方法
,反之则是非
静态
方法
。 下面我们分四个方面来看看
C#
静态
方法
与非
静态
方法
的差异:
C#
静态
方法
与非
静态
方法
比较一
C#
静态
成员: ①
静态
成员属于类所有,非
静态
成员属于类的实例所有。 ②每创建
一个
类的实例,都会在内存
C#
中
静态
方法
与
动态
方法
的
区别
例如,你首先创建
一个
`MyClass`的实例`myObject`,然后调用其实例
方法
:myObject.InstanceMethod();例如,如果你有
一个
名为`MyClass`的类,你可以这样调用其中的
静态
方法
:MyClass.
Static
Method();在
C#
中,
静态
方法
和实例
方法
是两种不同的
方法
类型,它们的主要
区别
在于如何访问以及它们的存储方式。实例
方法
可以访问类的所有成员,包括
静态
成员和实例成员。实例
方法
属于每个类的实例,每次创建
一个
新对象时,都会为该对象分配一份实例
方法
。
c#
静态
方法
与
动态
方法
区别
动态
方法
与
静态
方法
的
区别
: 1、
静态
方法
在返回值类型前需要先加
static
;
动态
方法
不用。 2、使用
方法
上的
区别
:
动态
方法
,在声明
方法
的类外使用时需要先创建实例,才能调用实例中的
动态
方法
;而
静态
方法
则不需要先实例类,直接使用即可(在项目的另
一个
类中
直接写包含所要使用的
静态
方法
的名,然后用“.”点出来即可)。 示例代码如下:
静态
方法
不需要实例化类就能调用 class ClassA { public
static
string MethodA() {
C#
中
静态
方法
和非
静态
方法
的
区别
在
C#
中,
静态
方法
和非
静态
方法
之间有几个关键的
区别
,这些
区别
主要体现在他们的定义、调用方式、访问权限以及对实例成员的访问能力上。:只能直接访问类的
静态
成员(包括
静态
字段、
静态
属性、
静态
方法
等),不能直接访问类的实例成员(除非通过某个实例的引用)。:每个类的实例都有自己的
方法
副本(实际上,
方法
本身在内存中只有一份,但每个实例都有
一个
指向该
方法
的引用或指针)。:因为
静态
成员属于类本身,所以
静态
方法
在内存中只有
一个
副本,无论创建了多少个类的实例。(1)
静态
方法
:可以通过类名直接调用,而不需要创建类的实例。
C#
111,130
社区成员
642,542
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章