2011-03-09 194 views
33

我有两个类A级和ClassB:非静态类中的静态方法和静态类中的静态方法有什么区别?

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();

当他们都可以访问的区别,而无需创建类的实例,为什么我们需要创建一个静态类,而不是仅使用非静态类并将这些方法声明为静态?

回答

32

唯一不同的是,在非静态类静态方法不能extension methods


换句话说,这是无效的:

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; } 
} 
13

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

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

从技术上讲,没有什么区别,除了ClassA的SomeMethod 必须是是静态的。

0

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

+0

我们如何从类的对象中调用静态方法,请给我一个例子 – Vamsi 2011-03-09 13:37:35

+0

“然而,静态方法可以在类和类的对象上调用。“我相信这种说法是错误的。 – Mahesh 2011-03-26 02:00:50

2

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

静态类没有构造函数,所以你不能创建它的一个实例。当你向它添加一个实例方法(你的意思是一个静态方法)时编译器会给出一个错误。

相关问题