39

我有两个类 A 类和 B 类:

static class ClassA
{
    static string SomeMethod()
    {
        return "I am a Static Method";
    }
}

class ClassB
{
    static string SomeMethod()
    {
        return "I am a Static Method";
    }
}

ClassA.SomeMethod();我想知道和有什么区别ClassB.SomeMethod();

当它们都可以在不创建类实例的情况下访问时,为什么我们需要创建一个静态类而不是仅仅使用非静态类并将方法声明为静态?

4

4 回答 4

40

唯一的区别是非静态类中的静态方法不能是扩展方法


换句话说,这是无效的:

class Test
{
    static void getCount(this ICollection<int> collection)
    { return collection.Count; }
}

而这是有效的:

static class Test
{
    static void getCount(this ICollection<int> collection)
    { return collection.Count; }
}
于 2011-03-09T05:54:02.580 回答
14

静态类只能包含静态成员。

静态方法确保即使您要创建多个 classB 对象,它们也只会使用一个共享的 SomeMethod 函数。

从技术上讲,没有区别,只是 ClassA 的 SomeMethod必须是静态的。

于 2011-03-09T05:54:29.167 回答
3

如果您有一个仅包含静态方法的非静态类,则可以创建该类的实例。但是您不能有意义地使用该实例。注意:当您没有定义构造函数时,编译器会为您添加一个。

静态类没有构造函数,因此您不能创建它的实例。当您向其中添加实例方法(您的意思是静态方法)时,编译器也会出错。

另请参阅文档

于 2012-09-19T11:30:44.127 回答
1

静态方法属于类,非静态方法属于类的对象。也就是说,非静态方法只能在它所属的类的对象上调用。静态方法只能访问静态成员。非静态方法可以访问静态和非静态成员,因为在调用静态方法时,可能不会实例化类(如果在类本身上调用它)。在另一种情况下,只能在类已经实例化时调用非静态方法。静态方法由类的所有实例共享。每当在 C++/Java/C# 中调用方法时,都会传递一个隐式参数(“this”引用),同时传递/不传递其他参数。如果是静态方法调用,

于 2011-03-09T08:49:18.087 回答