如何从静态函数中获取/设置成员变量?
问题描述:
我试图做这样的事情:如何从静态函数中获取/设置成员变量?
string strFirstName;
string strSurname;
public static bool MyItem(string FirstName, string Surname)
{
strFirstName = FirstName; //won't work obviously
strSurname = Surname;
}
private MyPrivateCode()
{
string MyPrivateFirstName = strFirstName;
string MyPrivateSurname = strSurname;
}
很显然,这是行不通的。我需要“MyItem”为公共静态,因为我需要能够从另一个类访问它。我在C#中编写代码。
答
静态方法只能引用静态成员。将不同的数据与您的类的不同实例关联的唯一方法是使用非静态成员。静态成员共享所有特定类的实例的相同数据。
的解决方案是通过其他类的实例此类(从中需要能够访问存储在所述第一类中的数据中的一个),并访问通过该实例需要的数据。
如果没有更多关于您想要完成的信息的更多信息,很难做出更具体的说明。
答
MyItem是静态的。所以你不能访问一个对象的实例变量。
静态方法只能访问其他静态变量。
其中的逻辑是,在运行时只有1个静态方法,但可能是1000个对象实例,那么如何知道谁的变量要使用?
static string strFirstName;
static string strSurname;
public static bool MyItem(string FirstName, string Surname)
{
strFirstName = FirstName; //won't work obviously
strSurname = Surname;
}
答
由于类的每个实例都将有自己的strFirstName
和strSurname
,这将毫无意义,从一个静态方法里面设置:它不会是哪一个应设置清楚。
你需要或者写
static string strFirstName;
static string stdSurname;
否则
public bool MyItem(string FirstName, string Surname)
即使变量静态的(这通常是没有意义在这种情况下),或者使该方法非静态(你可以也可以从“另一个类”中调用它,但您需要提供一个实例)
PS:另请注意,MyItem
必须返回布尔值才能正确编译。
我想你可能会滥用'static'。你想要完成什么? – SWeko 2011-03-07 07:39:51
再次是一个“红鲱鱼”的实例!当然,你在这里追逐一个错误的问题,请在这里提出“真正”的问题/用例,而不是你认为的解决方案的想法!! – 2011-03-07 08:53:01