我已经阅读了一些与这个问题相关的线程,我仍然不确定当前情况有什么好处。我有两个简单的类:
文件:
string name;
long size;
文件夹:
string name;
IList<File> files;
IList<Folder> folders;
如果我想实现一个计算文件夹内容 size 的方法,我应该将其实现为实例还是静态成员。实现需要一个Folder对象作为唯一参数,它不会改变变量的任何状态,所以我想把它变成静态但我不确定这是否是正确的步骤。
答案 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.Size
或Folder.Size()
,那么非静态是您的选择。
结论:当某个方法不属于某个类时,请使用static。
答案 3 :(得分:1)
在这种情况下不行,因为大小需要一个Folder对象,你必须实例化一个,然后在类本身内添加CalculateSize()
或GetSize()
之类的方法。
答案 4 :(得分:0)
您不必完全使用OOP,只需使用静态。