【问题标题】:Access static method from non static class possible in java and not in c#可以在 java 中而不是在 c# 中从非静态类访问静态方法
【发布时间】:2012-09-08 07:19:23
【问题描述】:

使用对象从非静态类访问静态方法。 这在 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# 中做到这一点? 提前谢谢..

【问题讨论】:

    标签: c# static static-methods static-classes


    【解决方案1】:

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

    StaticMemberClass.staticDisplay();
    

    【讨论】:

    • 我不明白你的问题。
    • 我的意思是在java中可以使用对象访问静态方法。但是,不是在 c# 中。为什么会有这种差异?
    【解决方案2】:

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


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

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

    当静态成员ME.M 形式的成员访问 (§7.6.4) 中被引用时,E 必须表示包含M 的类型。 E 表示实例是编译时错误。

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-18
        • 2018-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-18
        相关资源
        最近更新 更多