【问题标题】:public vs public static Methods公共与公共静态方法
【发布时间】:2013-03-17 18:27:16
【问题描述】:

阅读了 C# 编程教程中的访问修饰符后,我得出结论,定义一个方法 public 足以让它从同一命名空间的另一个 Form 中“看到”。

但是,在实践中,每当我尝试实现此功能时,我还必须将方法定义为 static,以便从同一命名空间的其他 Forms 中引用它。

我会失去什么吗? 我做错了什么?

【问题讨论】:

标签: c# static


【解决方案1】:

对于public static 方法,您不需要对对象的引用。该方法是静态的,可以在class 级别访问。

如果你不能访问公共方法,那么你需要一个对象的引用,然后你就可以了。

public class AClass
{
    public void DoSomething() {}
    public static void DoSomethingElse() {}
}

您可以按如下方式使用它们:

AClass.DoSomethingElse(); // no object reference required
AClass.DoSomething(); // will give compiler error, since you have no object reference.
var anObject = new AClass();
anObject.DoSomething(); // will work fine.
anObject.DoSomethingElse(); // compile error (thx hvd).

【讨论】:

  • "anObject.DoSomethingElse(); // 也可以正常工作" -- 你确定吗? Mono 的编译器给出了一个硬错误“错误 CS0176:无法使用实例引用访问静态成员,而是使用类型名称对其进行限定”,我似乎记得在 Microsoft 的编译器中也看到了一个错误。
  • 其实那个错误码CS0176 is Microsoft's code for that exact error.
【解决方案2】:

public static方法不需要对象实例,它们可以在不创建任何类实例的情况下使用

ClassName.MyStaticPublicMethodName()

由于public(非静态)方法需要类的实例,公共(非静态)方法通常可以帮助您处理对象的数据成员(字段)。

要使用非静态公共方法,您需要创建类的实例

ClassName obj = new ClassName();
obj.MyPublicMethod();

【讨论】:

    猜你喜欢
    • 2011-04-19
    • 2013-07-22
    • 1970-01-01
    • 2010-10-19
    • 2012-02-11
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 2015-02-10
    相关资源
    最近更新 更多