3

使用对象从非静态类访问静态方法。这在 C# 中是不可能的。它是由 JAVA 完成的。这个怎么运作?

java的例子

/**
* Access static member of the class through object.
*/
import java.io.*;

class StaticMemberClass {
    // Declare a static method.
    public static void staticDisplay() {
        System.out.println("This is static method.");
    }
    // Declare a non static method.
    public void nonStaticDisplay() {
        System.out.println("This is non static method.");
    }
}

class StaticAccessByObject {

    public static void main(String[] args) throws IOException {
        // call a static member only by class name.
        StaticMemberClass.staticDisplay();
        // Create object of StaticMemberClass class.
        StaticMemberClass obj = new StaticMemberClass();
        // call a static member only by object.
        obj.staticDisplay();
        // accessing non static method through object.
        obj.nonStaticDisplay();
    }
}

程序的输出:

This is static method.
This is static method.
This is non static method.

如何在 C# 中做到这一点? 提前致谢..

4

3 回答 3

4

instance.MethodC# 禁止通过, only引用静态方法Type.Method。要调用静态方法,您需要通过类型,而不是实例。
在您的情况下,这意味着StaticMemberClass.staticDisplay()有效,但obj.staticDisplay()无效。


当在表单的成员访问(第 7.6.4 节)中引用方法时E.M,如果M是静态方法,则E必须表示包含的类型M,如果M是实例方法,则E必须表示包含的类型的实例M

(C# 语言规范版本 4.0 - 10.6.2 静态和实例方法)

当在表单的成员访问(第 7.6.4 节)中M引用静态成员时,必须表示包含 的类型。表示实例是编译时错误。E.MEME

(C# 语言规范版本 4.0 - 10.3.7 静态和实例成员)

于 2012-09-15T09:30:00.277 回答
3

你不能。在您的情况下,您需要使用实际的课程

StaticMemberClass.staticDisplay();
于 2012-09-15T09:27:54.597 回答
0

您可以创建一个实例成员来包装对静态成员的调用。或者使静态成员成为实例成员。

于 2012-09-15T10:37:10.473 回答