2012-02-15 3 views
4

나는 C#을 처음 접하고 다른 메서드에서 문자열을 호출하는 방법을 알아야합니다. 예를 들어

:다른 메서드에서 변수를 참조하는 C#

그래서 button2_Click()

감사 기능에서 기능 button1_Click()에 정의 된 문자열 ""를 호출 할 필요는이 예에서

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

!

답변

24

:

void Method1() 
{ 
    var myString = "help"; 
    Method2(myString); 
} 

void Method2(string aString) 
{ 
    var myString = "I need "; 
    var anotherString = myString + aString; 
} 

을 그러나 이것을 달성하는 유일한 방법은 기본 폼 클래스에 이동하는 것입니다, 예제의 메서드는 이벤트 리스너입니다. 일반적으로 직접 전화하지 마십시오. (수 있습니다 수 있지만 하나의 합니다합니다.) 그래서이 특정 경우에는 사용하는 두 가지 방법에 대한 클래스 내의 일반적인 위치에 값을 저장하는 것이 더 신중한 것입니다. .이 같은 것은 :

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에서 매우 다르게 동작합니다. 그래서 그게 당신이 사용하고있는 것이라면 아마 그걸 한 걸음 더 나아가고 싶을 것입니다. 다르게 동작하는 이유는 서버 측이 "상태 비 저장"이기 때문입니다. 따라서 클라이언트에서 오는 각 버튼 클릭은 클래스의 완전히 새로운 인스턴스가 될 것입니다. 따라서 첫 번째 버튼 클릭 이벤트 핸들러에서 해당 클래스 수준 멤버를 설정하는 것이 두 번째 버튼 클릭 이벤트 핸들러에서 사용할 때 반영되지 않습니다.

그런 경우 웹 응용 프로그램 내에서 지속성 상태를 조사해야합니다. 옵션은 다음과 같습니다

  1. 페이지 값 (숨겨진 필드, 예를 들어)
  2. 쿠키
  3. 세션 변수
  4. 응용 프로그램 변수
  5. 데이터베이스
  6. 서버 측 파일을
  7. 일부 다른 서버 측에서 데이터를 지속하는 수단 등.
0

make는 클래스 수준 변수 (전역 변수)이거나 몇 가지 옵션의 이름을 지정하기 위해 String a에 대한 getter 및 setter를 만듭니다.

0

당신은 그렇게 할 수 없습니다. string a로컬 변수 선언입니다. 로컬 블록은 블록이 발생하는 블록에만 "로컬"로 액세스 할 수 있기 때문에 "로컬"이라고합니다.

변수를 두 메서드에서 모두 볼 수있게하려면 메서드가 들어있는 클래스에서 필드를 만들면됩니다. 그러나 메서드가 다른 클래스에 있으면 솔루션이 더 복잡해집니다.

7

class의 범위에 string a을 선언해야합니다. 메소드가 아니라 현재 "로컬 변수"입니다.

예 : 이제 예에 Form 될 것이다 당신의 class 아무 곳에서 "개인 필드"a의 값에 액세스 할 수 있습니다

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의 값에 액세스 할 수 있도록

1

팩터 :

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

또한 당신이 암시 적 타입 선언을 사용 할 수 있습니다. 이 변수는 다른 scopes에 (숨겨진 것으로 그것을 생각) 때문에이 작업을 수행 할 수

string a = GetStringAValue(); 
var a = GetStringAValue(); 
0

: 실제로, 이들은 해당하는 선언이다. 당신과 같이 인수로 전달할 것 일반적으로

public partial class Form1 : Form 
{ 
    string a; 

    // etc ... 
} 
0
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. 
    } 
} 
-2

당신은, 파일에 변수를 저장 다음과 같이 나중에 파일에 액세스 할 수 있습니다 :

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;

+0

나쁜 연습. 작은 일을하기 위해서이 접근법은 제안되지 않았습니다. –

관련 문제