Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 公共与公共静态方法_C#_Static - Fatal编程技术网

C# 公共与公共静态方法

C# 公共与公共静态方法,c#,static,C#,Static,在阅读了C#编程教程中的访问修饰符之后,我得出结论,定义一个方法public就足以让它从同一名称空间的另一个表单中“看到” 然而,在实践中,每当我尝试实现这个方法时,我还必须将该方法定义为静态,以便从相同名称空间的其他表单引用它 我失去什么了吗? 我做错了什么?对于公共静态方法,您不需要对对象的引用。该方法是静态的,可以在class级别访问 如果无法访问公共方法,则需要对该对象的引用,然后才能访问 public class AClass { public void DoSomething

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

然而,在实践中,每当我尝试实现这个方法时,我还必须将该方法定义为
静态
,以便从相同名称空间的其他
表单
引用它

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

对于
公共静态
方法,您不需要对对象的引用。该方法是静态的,可以在
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).

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

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

当as
public
(非静态)方法需要类的实例时,public(非静态)方法通常帮助您处理对象的数据成员(字段)

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

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

您是否创建了该方法所在的类的实例?该类是否也标记为static?发布一些代码“anObject.DoSomethingElse();//也可以正常工作”——您确定吗?Mono的编译器给出了一个硬错误“error CS0176:Static member无法通过实例引用访问,请改为使用类型名对其进行限定”,我似乎记得在Microsoft的编译器中也看到了一个错误。事实上,该错误代码是CS0176。