方法可以被声明为静态的,但是否应该这样做呢?

417

ReSharper喜欢指出每个ASP.NET页面中可以变成静态的多个函数。 如果我将它们变成静态的,这会对我有所帮助吗?我应该将它们变成静态并移动到实用程序类中吗?


22
难道 Resharper 实际上在呼喊“低内聚,低内聚”吗?现在是时候看看这个方法是否真的属于该类。 - P.K
2
可能是使用私有静态方法的优势的重复问题。 - drzaus
14个回答

3

如果多个页面共享同一个功能,您可以将它们放在一个基础页面类中,然后让所有使用该功能的ASP.NET页面继承自它(这些函数仍然可以是静态的)。


3

将一个方法声明为静态的,意味着你可以在不先创建该类实例的情况下从该类外部调用该方法。当使用第三方供应商对象或附加组件时,这非常有用。想象一下,在调用con.Writeline()之前,您必须首先创建一个控制台对象“con”,这是多么麻烦。


在调用con.Writeline()之前,Java会让你创建一个工厂实例来创建Console对象。 - ScottMichaud

2

它有助于控制命名空间污染。


10
将一个方法设为静态有什么助于避免命名空间污染? - lockstock
1
从经验来看,通过将方法分组到具有静态方法的类中,您可以避免不得不为可能与其他库或内置函数冲突的“杂项”函数添加前缀的经验。使用静态方法,它们在Classname下有效地命名空间化,例如Class.a_core_function( .. )a_core_function( .. ) - lintuxvi

0
仅作为我的建议:将所有的共享静态方法添加到一个实用类中,可以让您更方便地添加。
using static className; 

将你的使用语句添加到代码中,这样可以更快地输入代码并使其更易于阅读。例如,我继承了一些代码,其中有大量被称为“全局变量”的变量。我没有在实例类中创建全局变量,而是将它们全部设置为全局类的静态属性。虽然有点凌乱,但它能够完成工作,我只需通过名称引用属性,因为我已经引用了静态命名空间。

我不知道这是否是良好的实践。我还有很多关于C# 4/5的知识要学习,还有很多遗留代码要重构,所以我只是试图让Roselyn提示来指导我。

Joey


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接