我的大脑今天早上没有工作。我需要一些帮助从静态方法访问一些成员。以下是示例代码,如何修改此代码以便 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
}
}
答案 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
实例的状态,则使用后者。如果testInt
与TestPage
类型相关,则使用前者。
答案 1 :(得分:6)
有两种选择,具体取决于您的具体操作:
testInt
属性设为静态。TestMethod
,以便将TestPage
的实例作为参数。答案 2 :(得分:4)
protected static int testInt { get; set; }
但请注意线程问题。
答案 3 :(得分:4)
请记住,static
表示成员或方法属于该类,而不是该类的实例。因此,如果您在静态方法中,并且想要访问非静态成员,那么您必须具有要访问这些成员的类的实例(除非成员不需要属于任何一个特定实例)这个类,在这种情况下,你可以让它们静态)。