我应该使方法静态

时间:2015-04-05 19:53:31

标签: c# static

我已经阅读了一些与这个问题相关的线程,我仍然不确定当前情况有什么好处。我有两个简单的类:

文件:

string name;
long size;

文件夹:

string name;
IList<File> files;
IList<Folder> folders;

如果我想实现一个计算文件夹内容 size 的方法,我应该将其实现为实例还是静态成员。实现需要一个Folder对象作为唯一参数,它不会改变变量的任何状态,所以我想把它变成静态但我不确定这是否是正确的步骤。

5 个答案:

答案 0 :(得分:1)

最典型的,OOP-ish,这里的方法是实例方法。您不应该传递任何参数,而是使用this

static类中使用Folder方法本身会违反直觉并可能破坏封装原则。原因是,您的方法主要是在特定的Folder实例上运行,而且远离Folder类的功能似乎没有脱钩在这种微不足道的案件中是必要的。唯一有效的情况是支持返回一个回退值,例如0,以防传入null引用。但是,在大多数情况下,容忍此类输入会导致后续问题程序的控制流程。

答案 1 :(得分:1)

我想你能在这里找到答案:When to use static methods? 不是同一种语言,但这个想法非常相似。

答案 2 :(得分:1)

您可以与描述问题的内容进行比较

  

当我给你一个参数时计算一些东西。

我脑海中出现的第一件事就是Math.Pow这是一个静态方法

如果你想做Folder.Size(folder);,你可以做到静止。


如果方法在Folder内,问题就不同了。

  

当我有东西

时计算一些东西

我认为第一件事是Count(虽然这是一个属性),这是不是静态,因为这会计算每个唯一的内容类。

如果您想要Folder.SizeFolder.Size(),那么非静态是您的选择。


结论:当某个方法不属于某个类时,请使用static。

答案 3 :(得分:1)

在这种情况下不行,因为大小需要一个Folder对象,你必须实例化一个,然后在类本身内添加CalculateSize()GetSize()之类的方法。

答案 4 :(得分:0)

您不必完全使用OOP,只需使用静态。