我有以下内容:
public class Sort
{
public static void ShuffleGenericList<T>(IList<T> list)
{
//generate a Random instance
Random rnd = new Random();
//get the count of items in the list
int i = list.Count();
...
...
}
}
我的班级是否也应该是静态的,或者只是方法是静态的吗?
答案 0 :(得分:3)
将类标记为static
纯粹是可选的(如果它们不包含扩展方法)。
换句话说,静态类'成员也必须是静态的,但通常静态成员可以在任何中声明类强>:
// doesn't compile:
static class StaticClass {
void M() { }
}
// compiles:
class JustClass {
static void M1() { }
void M2() { }
}
从常识来看,应(但不必)将类标记为static
时:
例如,new Sort()
在您的代码中可能有或没有任何意义,具体取决于类中的内容等。从您提供的示例中,我认为将其标记为静态是可行的方法。
但请注意, 必须 将类标记为static
,当它包含extension methods时,您打算在其他部分使用码。包含扩展方法的类必须是静态的。
答案 1 :(得分:2)
答案是该类不需要是静态的,但让我们看看这里的逻辑。
如果我们有一个排序类(实用程序类),那么实例化它是没有意义的。那么为什么不让这个类静态呢?编程不只是关于最终结果 - 它还涉及使代码可读。
另一方面,为什么在非静态类中有静态方法?我没有遇到过太多次,但是一个好的用法可能是你打算只在该类中使用的实用函数。
答案 2 :(得分:1)
静态方法就足够了。
要测试,只需尝试调用它:
Sort.ShuffleGenericList([some list])
答案 3 :(得分:0)
可以从一个类中公开单个static
成员。
查看这些MSDN链接以获取详细信息:
请注意,如果您将类本身标记为static
,那么您将无法再实例化它并使用在整个应用程序中引用的多个副本 - 您可以将其限制为一站式商店,可以这么说。
答案 4 :(得分:0)
根据Microsoft,静态方法不必是静态类。
http://msdn.microsoft.com/en-us/library/79b3xss3(v=vs.80).aspx
答案 5 :(得分:0)
如果您的类没有任何实例成员且只有静态方法,则应将其设置为静态。
你绝对没有义务这样做,代码将编译并执行得很好而不这样做,但将其标记为静态有一些优点,最重要的是你将无法错误地创建实例