C# ссылка на переменную из другого метода
Я новичок в C# и мне действительно нужно знать, как вызвать/использовать строку из другого метода.
Например:
public void button1_Click(object sender, EventArgs e)
{
string a = "help";
}
public void button2_Click(object sender, EventArgs e)
{
//this is where I need to call the string "a" value from button1_click
string b = "I need ";
string c = b + a;
}
поэтому в этом примере мне нужно вызвать строку"a" определена в функции button1_Click()
функции button2_Click()
спасибо!!
8 ответов
обычно вы бы передали это как аргумент, например:
void Method1()
{
var myString = "help";
Method2(myString);
}
void Method2(string aString)
{
var myString = "I need ";
var anotherString = myString + aString;
}
методы в вашем примере несколько прослушивателей событий. Обычно ты не звонишь им напрямую. (Я полагаю, вы can, но я никогда не находил экземпляр, где один должны.) Поэтому в этом конкретном случае было бы более разумно хранить значение в общем месте в классе для двух используемых методов. Что-то вроде это:
string StringA { get; set; }
public void button1_Click(object sender, EventArgs e)
{
StringA = "help";
}
public void button2_Click(object sender, EventArgs e)
{
string b = "I need ";
string c = b + StringA;
}
обратите внимание, однако, что это будет вести себя очень по-разному в ASP.NET - ... Поэтому, если это то, что вы используете, вы, вероятно, захотите сделать еще один шаг. Причина, по которой он ведет себя по-другому, заключается в том, что на стороне сервера "нет состояния."Таким образом, каждый щелчок кнопки, поступающий от клиента, приведет к совершенно новому экземпляру класса. Таким образом, установив этот член уровня класса в первом обработчике событий нажатия кнопки, он не будет отражаться при использовании его во втором нажмите кнопку обработчик событий.
в этом случае вы захотите посмотреть на сохраняющееся состояние в веб-приложении. Варианты включают:
- значения страниц (например, скрытые поля)
- печенье
- Переменные Сеанса
- Переменные Приложения
- База Данных
- Серверный Файл
- некоторые другие средства сохранения данных на стороне сервера и т. д.
нужно объявить string a
в рамках class
, не метод, на данный момент это "локальная переменная".
пример:
private string a = string.Empty;
public void button1_Click(object sender, EventArgs e)
{
a = "help";
}
public void button2_Click(object sender, EventArgs e)
{
//this is where I need to call the string "a" value from button1_click
string b = "I need";
string c = b + a;
}
теперь вы можете получить доступ к значению вашего "частного поля"a
из любого места внутри вашего class
что в вашем примере будет Form
.
рефакторинг, который в вызов метода (или свойство), чтобы вы могли получить доступ к значению a
в другом месте в вашем приложении:
public String GetStringAValue() {
return "help";
}
public void button1_Click(object sender, EventArgs e) {
string a = GetStringAValue();
}
public void button2_Click(object sender, EventArgs e) {
string a = GetStringAValue();
string b = "I need";
string c = b + a;
}
также обратите внимание, что вы можете использовать неявные объявления типов. По сути, это эквивалентные объявления:
string a = GetStringAValue();
var a = GetStringAValue();
make-переменная уровня класса (глобальная переменная) или создание геттера и сеттера для строки a, чтобы назвать пару параметров.
вы не можете этого сделать. string a
Это объявление локальной переменной. он называется "локальным", потому что он доступен только" локально " для блока, в котором он происходит.
чтобы сделать переменную видимой для обоих методов, можно создать поле в классе, содержащем методы. Однако, если методы находятся в разных классах, решение становится более сложным.
вы не можете этого сделать, потому что эти переменные находятся в разных области (думайте, что это скрыто). Единственный способ достичь этого-переместить a в основной класс формы:
public partial class Form1 : Form
{
string a;
// etc ...
}
class SomeClass
{
//Fields (Or Properties)
string a;
public void button1_Click(object sender, EventArgs e)
{
a = "help"; //Or however you assign it
}
public void button2_Click(object sender, EventArgs e)
{
string b = "I need";
string c = b + (a ?? String.Empty); //'a' should be null checked somehow.
}
}
вы можете сохранить переменную в файл, а затем получить доступ к файлу позже, например:
public void button1_Click(object sender, EventArgs e)
{
string a = "help";
File.WriteAllText(@"C:\myfolder\myfile.txt", a); //Change this to your real file location
}
public void button2_Click(object sender, EventArgs e)
{
string d = File.ReadAllText(@"C:\myfolder\myfile.txt");
//this is where I need to call the string "a" value from button1_click
string b = "I need";
string c = b + d; //Instead of a, put the variable name (d in this case)
}
Если вы это сделаете, просто не забудьте поместить это в свой код:using System.IO;