一 ,我 在一个类里写了好多静态函数,因为可能经常调用或者很 常用。
二,取代上一种方式,我定义很多对象,把自己用到的函数写成公有类型的成员方法。(但是不同的对象用到的同一个操作略有区别而已,这样会导致好多重复的代码)
请问大家,用一和二哪个方法好一些,从效率上等等方面考虑,请说明原因,多谢。
代码是最无二义性的。
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#特性都能很好的满足重用代码且更灵活,可以的话可以试试。
总之,第一种方法更侧重于模块化,第二种方法更符合面向对象思想。
静态函数属于类,你抽象出来的那个类都需要这个方法,就可以定义成静态函数。
你说的第二种,略有区别,难道不能在继承上一个类,再实现一个静态函数么?
你是不是可以写一个静态的工具类,囊括你所有的那些经常调用的方法,建议你不要单独写非静态类,那样每次实例化一个对象,系统都是有创建和消灭这个对象的开销的,如果仅仅只是一些工具方法的话,建议你还是弄静态类吧。
静态函数 在程序 一直运行着 是一直占着内存的
你写公共方法的话,要先新建对象,每调用一次方法的话,就必须 新建一个对象,
根据具体情况来选择。。
效率你可以忽略,两者的效率差别很小