Отредактировал этот вопрос с другим связанным вопросом. Пожалуйста, помогите: Могу ли я использовать одинаковые имена переменных для нескольких методов класса? - PullRequest
1 голос
/ 13 июня 2011

Спасибо всем за ваши ответы. Одна проблема, с которой я сталкиваюсь, заключается в том, что когда я печатаю значение каждой из переменных в методах Helpdesk и IT, он не выводит «help», «hellp123» и «Welcome Helpdesk!» скорее выводит «admin», «admin» и «Welcome». Дело обстоит так же для метода IT.

public class Login
{
    public string[] array = new string[3];
    public string UserName;
    public string Password;
    public string Message;
}

public Login
{
   UserName = array[0] = "admin";
   Password = array[1] = "admin"; 
   Message = array[2] = "Welcome";

}

public void Helpdesk
{
    UserName = "help";
    Password = "help123";
    Message = "Welcome Helpdesk!";
    Console.WriteLine(UserName); //still prints admin
    Console.WriteLine(Password); // still prints admin
    Console.WriteLine(Message); // still prints Welcome
}
public void IT
{
    UserName = "it";
    Password = "Pa$$w0rd";
    Message = "Welcome IT!";

}

Могу ли я использовать те же имена переменных: UserName, Password и Message для методов: Helpdesk и IT для того же класса Войти, как показано ниже?
публичный класс Войти { публичная строка [] массив = новая строка [3]; публичная строка UserName; публичная строка Password; публичная строка Message; }

public Login
{
   UserName = array[0] = "admin";
   Password = array[1] = "admin"; 
   Message = array[2] = "Welcome";  
}

public void Helpdesk
{
    UserName = "help";
    Password = "help123";
    Message = "Welcome Helpdesk!";
}
public void IT
{
    UserName = "it";
    Password = "Pa$$w0rd";
    Message = "Welcome IT!";

}

Ответы [ 5 ]

2 голосов
/ 13 июня 2011

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

Примечание: если вы присваиваете поле только изнутри класса (как вы можете подразумевать в своем вопросе, но код не является полным), вы просто меняете его значение.

public class Login
{
    public string Message;
    public string Name;


    public void Test()
    {
       Message =  "Welcome";  // changes field, same as this.Message = ...
       var Name = "Me";       // does not change field, hides field Name
    }

}
2 голосов
/ 13 июня 2011

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

0 голосов
/ 13 июня 2011

Yes вы можете, поскольку вы объявили переменные как переменные-члены класса, вы можете получить к ним доступ любым методом в классе. Вы даже можете получить к нему доступ вне класса, поскольку они public, но требуется экземпляр класса, если он не public and static.

В ответ на ваш отредактированный вопрос предоставленный вами код даже не компилируется, однако при условии, что вы хотите создать класс

public class Login
{
    public string[] array = new string[3];
    public string UserName;
    public string Password;
    public string Message;


public Login()
{
   UserName = array[0] = "admin";
   Password = array[1] = "admin"; 
   Message = array[2] = "Welcome";

}

public void Helpdesk()
{
    UserName = "help";
    Password = "help123";
    Message = "Welcome Helpdesk!";
    Console.WriteLine(UserName); //still prints admin
    Console.WriteLine(Password); // still prints admin
    Console.WriteLine(Message); // still prints Welcome
}
public void IT()
{
    UserName = "it";
    Password = "Pa$$w0rd";
    Message = "Welcome IT!";

}
}

И в основном методе, если вы делаете

 Login login = new Login();
    login.Helpdesk();
    Console.ReadKey();

Будет выводиться

help
help 123
Welcome Helpdisk!

А не

admin
admin
Welcome
0 голосов
/ 13 июня 2011

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

0 голосов
/ 13 июня 2011

Если вы намереваетесь изменить значение переменных класса, да.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...