如何从静态函数中获取/设置成员变量?

时间:2011-03-07 07:32:38

标签: c# .net static-members oop

我正在尝试做这样的事情:

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#编码。

3 个答案:

答案 0 :(得分:4)

静态方法只能引用静态成员。将不同数据与类的不同实例相关联的唯一方法是使用非静态成员。静态成员共享特定类的所有实例的相同数据。

解决方案是将另一个类(您需要能够访问存储在第一个类中的数据的类)传递给此类的实例,并访问您需要的数据通过那个例子。

如果没有关于你想要完成什么的更多信息,就很难具体化。

答案 1 :(得分:1)

MyItem是静态的。因此,您无法访问对象的实例变量。

静态方法只能访问其他静态变量 这里的逻辑是,在运行时只有一个静态方法,但可能是1000个对象实例,所以你怎么知道要使用谁的变量?

static string strFirstName;
static string strSurname;

public static bool MyItem(string FirstName, string Surname)
{
    strFirstName = FirstName; //won't work obviously
    strSurname = Surname;
}

答案 2 :(得分:1)

由于该类的每个实例都有自己的strFirstNamestrSurname,因此从静态方法中设置它是没有意义的:不清楚应该设置哪一个。

你需要写

static string strFirstName;
static string stdSurname;

或者

public bool MyItem(string FirstName, string Surname)

即。使变量变为静态(在这种情况下通常没有意义)或使方法非静态(你也可以从“另一个类”调用它,但你需要给出一个实例)

PS:另请注意,MyItem必须返回一个布尔值才能正确编译。