从静态方法获取访问权限

时间:2010-01-12 15:06:24

标签: c# static-methods

我的大脑今天早上没有工作。我需要一些帮助从静态方法访问一些成员。以下是示例代码,如何修改此代码以便 TestMethod()可以访问 testInt

public class TestPage
{ 
    protected int testInt { get; set; }

    protected void BuildSomething
    {
      // Can access here
    }

    [ScriptMethod, WebMethod]
    public static void TestMethod()
    {
       // I am accessing this method from a PageMethod call on the clientside
       // No access here
    }  
}

4 个答案:

答案 0 :(得分:10)

testInt被声明为实例字段。如果没有对定义类的实例的引用,static方法就不可能访问实例字段。因此,要么将testInt声明为静态,要么将TestMethod更改为接受TestPage的实例。所以

protected static int testInt { get; set; }

没关系

public static void TestMethod(TestPage testPage) {
    Console.WriteLine(testPage.testInt);
}

其中哪一个是正确的,在很大程度上取决于你想要建模的东西。如果testInt表示TestPage实例的状态,则使用后者。如果testIntTestPage类型相关,则使用前者。

答案 1 :(得分:6)

有两种选择,具体取决于您的具体操作:

  • testInt属性设为静态。
  • 更改TestMethod,以便将TestPage的实例作为参数。

答案 2 :(得分:4)

protected static int testInt { get; set; }

但请注意线程问题。

答案 3 :(得分:4)

请记住,static表示成员或方法属于该类,而不是该类的实例。因此,如果您在静态方法中,并且想要访问非静态成员,那么您必须具有要访问这些成员的类的实例(除非成员不需要属于任何一个特定实例)这个类,在这种情况下,你可以让它们静态)。