如何在C#中访问静态方法?

11

当我们在一个类中有一个静态方法时,它只能访问静态成员,并且静态方法只能通过类名访问。所以我无法在我的示例中访问静态方法:

class myclass
{
    int i  ; static int j ;
    static void get()
    {
        j = 101;
        Console.WriteLine(j.ToString ());
    }
    public void test()
    {
        i = 11; j = 12;
        Console.WriteLine(i.ToString());
        Console.WriteLine(j.ToString());
    }
}
class Program
{
    static void Main(string[] args)
    {
        myclass clsmyclas = new myclass();
        clsmyclas.test();

        Console.ReadLine();
    }
}

}

:这是一个HTML段落,内容为单个右花括号字符“}”。
5个回答

11
你应该将它改为:
public static void get() 

并使用以下方式访问它

myclass.get();

不是该类的实例。


谢谢,它工作得很好,感谢astander先生的回应。 - Surya sasidhar
不,不能确定他实际上应该将其更改为public。还有其他可访问级别可以使其可访问,这可能更适合该情况。 - Guffa

5
您的问题很简单。静态无返回值方法的默认访问器是 private。只需在 get 方法前面添加 publicinternal,就可以解决问题了。
另外,最好不要将该方法命名为 get,以避免与属性混淆。

1
成员的默认可访问性是最私有的。这意味着如果您未指定任何访问级别,您的方法将是私有的。
您必须将其指定为公共的(或者如果只需要在同一项目中访问,则为内部),才能访问它:
public static void get()

或者:

internal static void get()

1
你需要将myclass.get方法改为公共方法。

不需要,还有其他可访问性级别可以使其可访问,并且根据情况可能更好。哦,什么是“pubic”方法? ;) - Guffa
你不是公共场合恐惧症患者吧? ;) - codenheim
我经常使用public关键字,但是一个答案不应该说public是唯一可能的选项,如果它并不是。 - Guffa
@Guffa:谁说答案不能这样回答?这是一个公共维基。我认为你在执法上过于拘泥小节了。我选择不提及所有可能的作用域修饰符。有一个答案(除了你自己的)解释了internal;给它点赞。你听过这样的话吗,“你需要给自己买一辆车”?暗示着对某些人来说,汽车是个好主意。但摩托车或自行车可能更合适。public就可以了。但我想我们都明白你的观点。 - codenheim

0

在静态方法上,你可以使用任何访问修饰符。

当然,访问修饰符只会限制它在类外部的使用方式。

但是,静态方法不能使用this关键字作为对父类的引用。

根据方法的访问级别,你可以静态地调用一个方法,如下:

ClassName.Property
ClassName.Method
ClassName.Field

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接