封装类,用静态类方式和菲静态类有什么区别吗

蜗牛学编程 2021-01-15 09:52:17
各位老师,请教一个问题。
因为是自学C#,所以有些问题知其然不知其所以然,特地上来请教各位老师。
我要封装一个类,有静态类(public static )和非静态类 (public void)两种方式。
两种方式都能达到我的目的,譬如对数据库的增删查改。就我个人而言,我用非静态方式(public void)用得很顺手,很少用静态方式。
但看网上很多人都用静态方式,因此,想知道一下:
静态类和非静态类在功能上有什么差别?
哪个速度或者占的资源大?
用静态类返回一个dataTable,这个table是在引用结束后就会自动释放内存,还是要等系统自动不定期回收清理?
我如果一直都用非静态类封装,会有什么问题吗?
感谢。
...全文
342 11 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
1、对于新人:工具类,用静态方法,其它情况用实例方法。 因为你不理解,所以只能大体上凑和着用。 2、如果你要理解静态的相关设计: 静态类:语法限制:方法和变量都只能是静态的。 静态构造函数:应用程序全局只初始化一次。 静态方法:只是调用方式不同,为:类名.方法名(...)。 静态变量: 其一:是应用程序全局的生命周期【除非你手工给它赋null值】。 其二:是应用程序内的全局唯一【意味着多个请求会共享一个同一个变量,因此,需要根据业务思考:是否需要加锁来处理并发问题】
  • 打赏
  • 举报
回复
ziqi0716 2021-01-19
这个从面向对象来解释的话,其实很好确定是否应该设置为静态,该是什么就是什么. 比如,设计人类的时候,常用的吃喝等方法,应该属于人类个体的行为,那就不应该是静态.而人口属性和计算人类总人数方法,应该是全人类共有的才对. 静态本身的特性是全局共享一个,但用它的时候应该是考虑类和对象本身应该是什么样才符合领域模型应有的样子,应该是为了使我们的建模实现更加真实而去选择是否使用静态.
  • 打赏
  • 举报
回复
仅当我们需要将对象实例“作为对象实例”进行参数传递、继承扩展等等设计时,我们也许才需要使用单例模式。否则不必反而以繁琐为美。如果使用静态类就足够,那么使用静态类更好。



引用 3 楼 白衣如花 的回复:
个人不太喜欢静态类(启动程序就会加载到内存)


在 .net 中启动程序并不会“加载到内存”。只有当的程序第一次访问某个类型时,才会加载类型上(而不是具体某个对象实例)声明的对象实例。
  • 打赏
  • 举报
回复
实际上此时先去纠结一堆“计算机领域的概念”是无意义的。例如你的程序设计的“领域层”是面向多个机器的资源管理的系统,那么显然每一个机器都有一个唯一的ID号,每一个机器的都有自己的私有的一堆状态属性和控制方案,那么这就应该是“非静态的”Class。相反如果把一些简单的类库方法——春计算机领域的底层过程——搞成非静态的,那就是多制造了概念。
  • 打赏
  • 举报
回复
如果系统“领域建模”时就是面向对象的,那么你就应该使用“非静态类”。反之就自然适合使用静态类。所谓“面向对象的”,就是说对象类的每一个实例都是独立的、唯一标识的,甚至是用来被继承、重载部分接口实现功能的。

一般来说,我们编程当然是要少写Class、interface等等,没有必要无需增加更多新概念新名词。但是上升到“设计层面”,假设领域模型就是面向对象的,那么设计Class和interface才是一种能力。
  • 打赏
  • 举报
回复
圣殿骑士18 2021-01-16
静态类和非静态类在功能上有什么差别? 可以认为没区别 哪个速度或者占的资源大? 差异极小 用静态类返回一个dataTable,这个table是在引用结束后就会自动释放内存,还是要等系统自动不定期回收清理? 后者。不管是静态类还是非静态类,还是其他什么方式生成,都是这样 我如果一直都用非静态类封装,会有什么问题吗? 你一直用,说明你对语法的应用场景理解还不够,思考一下,哪些场景下用静态类会更好(不是性能,不是速度,是要在代码的好坏上思考:精简易用好维护的代码)
  • 打赏
  • 举报
回复
白衣如花 2021-01-16
静态类能保证唯一,不会自动释放,只能主动释放或者程序结束

非静态类如果不使用单例的话,会导致你每次调用都是一个新副本,可能导致数据不同步

单例是一个模式,静态是它的一种实现方式

个人不太喜欢静态类(启动程序就会加载到内存)
  • 打赏
  • 举报
回复
圣殿骑士18 2021-01-16
静态非静态,等等特种语法特性,不是以功能区分的,而是应用场景区分的。 还有楼上说的单例,以及.net5的单例用的多,不推荐用静态类,我是不认同的,代码的风格一般几年一变,像老早的ejb,ssh架构安在?webform安在?单例并不稀奇,.net编程者那么做,也是因为场景合适,没有必要跟风。
  • 打赏
  • 举报
回复
蜗牛学编程 2021-01-16
引用 4 楼 圣殿骑士18 的回复:
静态类和非静态类在功能上有什么差别? 可以认为没区别 哪个速度或者占的资源大? 差异极小 用静态类返回一个dataTable,这个table是在引用结束后就会自动释放内存,还是要等系统自动不定期回收清理? 后者。不管是静态类还是非静态类,还是其他什么方式生成,都是这样 我如果一直都用非静态类封装,会有什么问题吗? 你一直用,说明你对语法的应用场景理解还不够,思考一下,哪些场景下用静态类会更好(不是性能,不是速度,是要在代码的好坏上思考:精简易用好维护的代码)
嗯,谢谢解答。确实,因为全是自己自学,所以对很多东西都一知半解。也可能是还没到那地步逼迫自己考虑静态的用法,用非静态的目前也能够应付吧,大不了就是代码显得臃肿些,哈哈。 学习的路还很长,以后我还要多向各位老师们请教才行。
  • 打赏
  • 举报
回复
楠小南 2021-01-16
不用静态,现在用单例的多, 现在 net5.0 的 到处都是 services.AddSingleton() ,注册一个单例很简单,还用什么静态类,静态类只有在扩展方法中才用得多
  • 打赏
  • 举报
回复
静态表示全局么,全局使用的东西用静态和单例。一般数据库上下文什么会设计成静态。

有个体区分的用实例,比如Socket,每个Socket都独立的连接,断了就不用了,你不可能只用一个静态变量或集合来表示。
  • 打赏
  • 举报
回复
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2021-01-15 09:52
社区公告

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