希望大家发表下意见,深入一点,呵呵
解决方案 »
- 新手求助
- 一个关于GDI+的简单问题
- c#winform程序打包后在本机运行正常,在别人机器总是提示"SQL Server不存在或访问被拒绝"
- 直接取oracle的sequence的方法
- c#中,焦点问题!
- 求教,c#如何屏蔽系统热键,比如Ctrl+Alt+Del或者Alt+TAB
- 请教把Windows窗体的数据赋值给一个强类型数据集,调试显示“在位置 0 处没有任何行”是什么原因呀?
- HELP~~~~~~~~~,为什么解决方案中的某些类库不能编译了
- VS2013 点安装文件 一闪而过,是怎么回事?
- C#.net中(exe,dll)文件版本生成问题?
- 事件会多次执行,怎么解决呀?????
- vs2010 beta2怎么水晶报表不能用呀?
别的不知道了.
http://www.cnblogs.com/dc10101/archive/2007/08/22/865556.html
用面向对象解释:比如Person(人)类,有一个Color(肤色)属性,如果这个属性不是静态的,那么new(生)出来的人可以是黄种人、白种人或黑种人等等,但是如果这个属性是静态的,那么生出来的就全是一种肤色的人了.所以这个类也应该改名(黄种人类).
一、 静态方法常驻内存,实例方法不是,所以静态方法效率高但占内存。
事实上,方法都是一样的,在加载时机和占用内存上,静态方法和实例方法是一样的,在类型第一次被使用时加载。调用的速度基本上没有差别。
二、 静态方法在堆上分配内存,实例方法在堆栈上。
事实上所有的方法都不可能在堆或者堆栈上分配内存,方法作为代码是被加载到特殊的代码内存区域,这个内存区域是不可写的。
三、 实例方法需要先创建实例才可以调用,比较麻烦,静态方法不用,比较简单。
事实上如果一个方法与他所在类型的实例无关,那么它就应该是静态的,决不会有人把它写成实例方法。所以所有的实例方法都与实例有关,既然与实例有关,那么创建实例就是必然的步骤,没有麻烦简单一说。实际上上你可以把所有的实例方法都写成静态的,将实例作为参数传入即可。
有些方法看似与所在的实例无关,如IComparer.Compare方法,但实际上每一个实现这个接口的类都只会负责自己类型实例的比较,这是C#1.x规范中没有泛型所带来的历史遗留问题。
大部分静态方法是与类的实例有关的,如各种Parse方法,他做成静态的原因是他没有实例作为参数。其他的大多是出于语义或者其他目的的考虑。