社区
C#
帖子详情
静态方法和动态方法的使用场合?
huxiaoiqing0007
2011-11-22 01:11:24
正在学习采用三层架构做程序,有个问题想请教:model层用来传参数; dal用来操作数据库; bll层调用dal层的方法。bll层调用dal层方法时需要生成对应类的实例。窗口中调用bll方法的时候,要实例化一个bll的类。如是dal和 bll类里的方法都定义成静态的,不就用类名直接调用了吗,比每次都实例化要省事些吧?
PS:我知道静态属性只有一份,不同类的属性可能不一样,所以不能用静态的,但是方法用静态的应该不存在这个问题吧?
...全文
296
14
打赏
收藏
静态方法和动态方法的使用场合?
正在学习采用三层架构做程序,有个问题想请教:model层用来传参数; dal用来操作数据库; bll层调用dal层的方法。bll层调用dal层方法时需要生成对应类的实例。窗口中调用bll方法的时候,要实例化一个bll的类。如是dal和 bll类里的方法都定义成静态的,不就用类名直接调用了吗,比每次都实例化要省事些吧? PS:我知道静态属性只有一份,不同类的属性可能不一样,所以不能用静态的,但是方法用静态的应该不存在这个问题吧?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xixihaha_2011_098
2011-11-23
打赏
举报
回复
项目不是很大,暂时按照自己的理解去做。自己觉得没区别。那就用静态或者动态。不必太在意理论。实现需求就可以。也许,现在经验不足。做低效率或者无用功,下一个项目就可以避免。这就是项目经验。
huxiaoiqing0007
2011-11-23
打赏
举报
回复
感谢!谢谢!看来自己闷头学还不行,还要多交流。分数有限,就按回答的先后给分吧,还请见谅!
以专业开发人员为伍
2011-11-23
打赏
举报
回复
楼上很多回复都已经说了,对于工程设计没有需求、只是纠结在语法是否“方便”上,这不能怪你。只能怪你的老师没有带你去做几个实际的复杂的分析实例。要知道需求是千变万化的,软件需要不断扩展、不断重构、不断用新的东西装旧的内容才能翻新。
以专业开发人员为伍
2011-11-23
打赏
举报
回复
编程不重要,它又很混乱的做法。所以看人的能力要看设计,而不是看编程。
而设计,就要看它是否具有基本的扩展性。比如在必要时,它就能继承和多态(而不是什么封装和分类),现在就能够按照接口(或者父类、抽象类,随便你用什么术语,意思基本上一样)来实现这种扩展性。最终,这种设计是直接等同于应用领域概念,而不是计算机概念。
缪军
2011-11-22
打赏
举报
回复
你可以看看有关接口或者多态的知识
但是要真正理解恐怕还是需要实践积累,
就你的问题,你要以面向对象设计的思维去看:
静态也好,实例化也好,对你现在的项目,是工作量有区别呢?还是代码质量有区别?
又或者是可扩展性有区别?
等你什么时候发现差别了,在新的项目中使用更加有效的手段,过去的就让他过去
huxiaoiqing0007
2011-11-22
打赏
举报
回复
如果有一天,你的一个业务逻辑或者数据访问存在多种实现手段的时候,
你就会明白Method和static Method之间的差异
你的意思,好像明白了一点,但不知道自己明白的对不对。
能不能给个例子,学习下?
huxiaoiqing0007
2011-11-22
打赏
举报
回复
[Quote=引用 7 楼 microtry 的回复:]
1.我看了一下你的层之间的驱动关系,你的bll实际上是多余的,
因为你并没有抽离出真正的业务逻辑;
2.编程方法服务于设计需求,
如果有一天,你的一个业务逻辑或者数据访问存在多种实现手段的时候,
你就会明白Method和static Method之间的差异
[/Quote]
你说的很对。因为刚学习,并没有抽离出真正的业务逻辑,所以现在的bll基本上只调用了dal层的方法对数据库进行操作(刚接触,还不太懂)。
缪军
2011-11-22
打赏
举报
回复
1.我看了一下你的层之间的驱动关系,你的bll实际上是多余的,
因为你并没有抽离出真正的业务逻辑;
2.编程方法服务于设计需求,
如果有一天,你的一个业务逻辑或者数据访问存在多种实现手段的时候,
你就会明白Method和static Method之间的差异
xiongxyt2
2011-11-22
打赏
举报
回复
[Quote=引用 2 楼 huxiaoiqing0007 的回复:]
引用 1 楼 vrhero 的回复:
什么叫“动态方法”?
实例对象和静态对象的概念是OOP的基础概念,如何定义哪里适用是有严格的规范的,由不得你方不方便省不省事,跟什么“三层”更是毫无关系...先打好基础再去想怎么吃成胖子...
比如我把BLL层的方法都定义成静态方法,然后直接用类名.方法名调用,可以吗?这和先new一个类的实例,然后用实例调用方法,如,AMPLE a=new AM……
[/Quote]
当然有区别了,静态方法是属于类的,
都定义成静态方法
,要看需求,静态方法只能访问类中的静态成员,如果要访问就不行了。
1、C#静态方法属于类所有,类实例化前即可使用。
2、非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员。
因为静态方法在类实例化前就可以使用,而类中的非静态变量必须在实例化之后才能分配内存, 这样,C#静态方法调用时无法判断非静态变量使用的内存地址。所以无法使用。而静态变量的地址对类来说是固定的,故可以使用。
C#静态方法是一种特殊的成员方法 它不属于类的某一个具体的实例,而是属于类本身。所以对静态方法不需要首先创建一个类的实例,而是采用类名.静态方法的格式 。
1.static方法是类中的一个成员方法,属于整个类,即不用创建任何对象也可以直接调用!
static内部只能出现static变量和其他static方法!而且static方法中还不能使用this....等关键字..因为它是属于整个类!
2.静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁。
3.静态方法和静态变量创建后始终使用同一块内存,而使用实例的方式会创建多个内存.
4.C#中的方法有两种:实例方法,静态方法.
静态方法中用:
string className = System.Reflection.MethodBase.GetCurrentMethod().ReflectedType.FullName;
非静态方法中还可以用:
string className = this.GetType().FullName;
参考
jimh
2011-11-22
打赏
举报
回复
如果跟实例环境无关,那使用静态方法是最理想的。
hztltgg
2011-11-22
打赏
举报
回复
你的BLL层的方法都没有状态的吗?全部的状态都是从参数里调用?如果是的话,都会有建议让你改成静态方法。
huxiaoiqing0007
2011-11-22
打赏
举报
回复
[Quote=引用 1 楼 vrhero 的回复:]
什么叫“动态方法”?
实例对象和静态对象的概念是OOP的基础概念,如何定义哪里适用是有严格的规范的,由不得你方不方便省不省事,跟什么“三层”更是毫无关系...先打好基础再去想怎么吃成胖子...
[/Quote]
比如我把BLL层的方法都定义成静态方法,然后直接用类名.方法名调用,可以吗?这和先new一个类的实例,然后用实例调用方法,如,AMPLE a=new AMPLE();a.GetModel();有什么区别?
vrhero
2011-11-22
打赏
举报
回复
什么叫“动态方法”?
实例对象和静态对象的概念是OOP的基础概念,如何定义哪里适用是有严格的规范的,由不得你方不方便省不省事,跟什么“三层”更是毫无关系...先打好基础再去想怎么吃成胖子...
什么时候用
静态
方法
?什么时候用单例模式?(推荐)
二、
静态
方法
和非
静态
方法
的区别? 三、为什么要有非
静态
方法
? 从这三点我们得出的结论如下: 一、 什么时候用
静态
方法
,什么时候
使用
非
静态
方法
? 二、 为什么
使用
单例模式而不用
静态
方法
? 三、 其他 我们...
Java中什么时候
使用
静态
方法
?
需要注意的是,
静态
方法
不依赖于对象的实例,无法直接访问实例变量,只能访问静态变量或其他
静态
方法
。辅助
方法
:某些情况下,需要在类的
静态
方法
中执行一些与类本身相关但不需要实例状态的操作。这样的
静态
方法
可以...
静态
方法
与单例模式的区别以及为什么要用单例模式而不是
静态
方法
要搞清这些问题,需要从
静态
方法
和非
静态
方法
的区别和联系说起。 一、
静态
方法
常驻内存,非
静态
方法
只有
使用
的时候才分配内存? 一般都认为是这样,并且怕
静态
方法
占用过多内存而建议
使用
非
静态
方法
,其实这个理解...
什么情况下适合
使用
静态路由?什么情况下适合
使用
动态
路由?
大型和复杂的网络环境通常不宜采用...静态路由是由网络管理员根据网络拓扑,
使用
命令在路由器上配置的路由,这些静态路由信息指导报文发送,静态路由方式也无需路由器进行计算,但它完全依赖于网络管理员的手动配置。
静态路由和
动态
路由
静态路由和
动态
路由 静态路由是由系统管理员设计与构建的路由表规定的路由。适用于网关数量有限的
场合
,且网络拓朴结构不经常变化的网络。其缺点是不能
动态
地适用网络状况的变化,当网络状况变化后必须由网络管理员...
C#
110,533
社区成员
642,574
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章