首页 新闻 会员 周边

急急急 静态函数 和对象问题

0
悬赏园豆:10 [已解决问题] 解决于 2012-02-04 10:20

一 ,我 在一个类里写了好多静态函数,因为可能经常调用或者很 常用。

二,取代上一种方式,我定义很多对象,把自己用到的函数写成公有类型的成员方法。(但是不同的对象用到的同一个操作略有区别而已,这样会导致好多重复的代码)

 

请问大家,用一和二哪个方法好一些,从效率上等等方面考虑,请说明原因,多谢。

c#
L4的主页 L4 | 初学一级 | 园豆:0
提问于:2011-12-16 14:42
< >
分享
最佳答案
0

代码是最无二义性的。

1, 你说的第一种情况

namespace StaticClassImp
{
public class StaticClass
{
public static void NoStateProcess()
{
// do something
}
public void FuncA()
{
// some state process

StaticClass.NoStateProcess();

// some state process
}
public void FuncB()
{
// some state process

StaticClass.NoStateProcess();

// some state process
}
}
}

2, 你说的第二种情况

namespace NotStaticClassImp
{
internal static class StaticClass
{
public static void NoStateProcess()
{
// do something
}
}
public class ClassA
{
public void FuncA()
{
// some state process

StaticClass.NoStateProcess();

// some state process
}
}

public class ClassB
{
public void FuncB()
{
// some state process

StaticClass.NoStateProcess();

// some state process
}
}
}

从以上代码来看,这两种方法除了一些实现细节的差别,没什么本质区别。

方法本身没有优劣之分,关键是看你把方案部署到什么应用场景中。

比如,如果你想自己实现部分C语言字符串处理函数(e.g. strcopy,strlen),没什么状态伴随,也无需特意抽象出独立的类。

又比如,你正在实现一些业务逻辑,不同对象之间有些代码存在重复,最简单的办法就是把重复的代码抽离出来作为一个static类的方法。如果这些方法你的用户不需要关注,建议你把这个static表上internal。当然,还有很多这样的情况。面向对象继承特性最大好处就是代码重用,但是这样是你的需求而定,为了复用代码而使用继承不是个好主意。策略模式,delegate C#特性都能很好的满足重用代码且更灵活,可以的话可以试试。

总之,第一种方法更侧重于模块化,第二种方法更符合面向对象思想。

收获园豆:10
胡屯 | 小虾三级 |园豆:714 | 2011-12-17 10:02
其他回答(4)
0

静态函数属于类,你抽象出来的那个类都需要这个方法,就可以定义成静态函数。

你说的第二种,略有区别,难道不能在继承上一个类,再实现一个静态函数么?

陈英俊 | 园豆:207 (菜鸟二级) | 2011-12-16 15:15
0

你是不是可以写一个静态的工具类,囊括你所有的那些经常调用的方法,建议你不要单独写非静态类,那样每次实例化一个对象,系统都是有创建和消灭这个对象的开销的,如果仅仅只是一些工具方法的话,建议你还是弄静态类吧。

喝不了酒 | 园豆:222 (菜鸟二级) | 2011-12-16 17:29
0

静态函数 在程序 一直运行着 是一直占着内存的

你写公共方法的话,要先新建对象,每调用一次方法的话,就必须 新建一个对象,

 

根据具体情况来选择。。

Anleb | 园豆:208 (菜鸟二级) | 2011-12-17 09:24
0

效率你可以忽略,两者的效率差别很小

Lukexywang | 园豆:178 (初学一级) | 2011-12-22 22:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册