Как я могу получить / установить переменные-члены внутри статической функции? - PullRequest
1 голос
/ 07 марта 2011

Я пытаюсь сделать что-то вроде этого:

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 ]

4 голосов
/ 07 марта 2011

Статические методы могут ссылаться только на статические члены. Единственный способ связать разные данные с разными экземплярами вашего класса - это использовать нестатические члены. Статические члены совместно используют одни и те же данные для всех экземпляров определенного класса.

Решение состоит в том, чтобы передать другому классу (тот, из которого вам нужно иметь доступ к данным, хранящимся в первом классе) экземпляр этого класса и получить доступ к нужным вам данным через этот экземпляр.

Трудно быть более конкретным без дополнительной информации о том, чего именно вы хотели бы достичь.

1 голос
/ 07 марта 2011

Поскольку каждый экземпляр класса будет иметь свои собственные strFirstName и strSurname, не имеет смысла устанавливать его из статического метода: неясно, какой из них должен быть установлен.

Вам нужно либо написать

static string strFirstName;
static string stdSurname;

, либо

public bool MyItem(string FirstName, string Surname)

, т.е. сделать переменные статическими (что обычно не имеет смысла в этом случае), либо сделать метод нестатичным (Вы также можете вызвать его из «другого класса», но вам нужно будет предоставить экземпляр)

PS: также обратите внимание, что MyItem должен возвращать логическое значение для правильной компиляции.

1 голос
/ 07 марта 2011

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;
}
...