2014-04-30 2 views
0

Visual Studio에서 전역 변수를 설정하려고하지만 정적으로 설정할 수 없습니다. 변수를 정적으로 설정하고 다른 방법에 공유하거나 변경 될 때마다 변수를 저장하는 방법이 있습니까?글로벌 정적 변수 선언

+0

정적 인 VB.NET은 '공유 됨'입니다. 이런 방식으로 호출 : ClassName.SharedVariableName'. 이 클래스의 외부에서 액세스하려면 '공용'이어야합니다. 메소드간에 만 공유하지 않고 잠금 또는 잘못된 결과를 초래할 수있는 여러 스레드에서 공유한다는 점에 유의하십시오 (예 : ASP.NET). –

+0

"Shared"가 정적 인 것에 대한 재 보증에 감사드립니다. 내 작업에서 런타임 오류가 발생하거나 "공유"형식의 변수를 사용하고있는 것처럼 보입니다. 예를 들어 주시겠습니까? – user3568182

+0

코드를 게시 할 수 있습니까? –

답변

3

당신은 두 가지 옵션이 있습니다

1 - 공유 변수를 그런 다음 클래스 이름을 사용하여이 액세스 할 수 있습니다

Public Class GlobalVariables 
     Public Shared Bar As String 
    End Class 

(이 C#에서 같은 정적 변수)를 포함하는 클래스를 만듭니다 :

GlobalVariables.Bar = "Hello world" 

2 -

(이 C#에서 정적 클래스에 가깝다) 모듈을 만들고당신은 다음과 같은 코드에서이 값에 액세스 할 수 있습니다

: 당신은 @ 매트 WILKO가 제시 한 숫자 1 옵션을 사용하는 경우

Bar = "Goodbye cruel world" 
+0

공유 변수를 사용 된 메서드와 동일한 클래스 안에 넣고 클래스 이름없이 변수 이름으로 참조했습니다. 동일한 클래스 안에 있기 때문에 classname.variablename에 있습니다. 이것이 오류일까요? 또한, 예를 들어 버튼 클릭 기능을 찾을 수있는 것처럼 메드 드를 삽입합니까? – user3568182

0

, 당신도 클래스의 객체 인스턴스를 통해 또는 공유 멤버를 참조 할 수 있습니다 객체 참조가없는 클래스를 참조하면됩니다. 둘 다 동일한 변수를 가리키고 증가하므로 동일한 값을 참조합니다. Visual Studio 컴파일러는 개체 인스턴스를 참조하는 것에 대한 경고를 제공하지만 평가되지는 않지만 여전히 컴파일됩니다. 컴파일러의 권장 사항은 클래스 이름을 사용하는 것입니다.

Public Class GlobalVariables 
    Public Shared Foo As Integer 
End Class 

은 모두와 그 (20)

Private Sub IncrementIntegers() 
    Dim myGlobalVariables As New GlobalVariables 
    myGlobalVariables.Foo = 0 
    GlobalVariables.Foo = 0 
    myGlobalVariables.Foo += 10 
    GlobalVariables.Foo += 10 
    Dim iLocalInt1 = myGlobalVariables.Foo 
    MessageBox.Show("myGlobalVariables.Foo = " & iLocalInt1.ToString) 
    Dim iLocalInt2 = GlobalVariables.Foo 
    MessageBox.Show("GlobalVariables.Foo = " & iLocalInt2.ToString) 
End Sub 

참고 반환 형태로 다음을 삽입하고 버튼 클릭 이벤트 프로 시저에서 IncrementIntegers()를 호출하고 해당 myGlobalVariables.Foo을 발견하고 GlobalVariables.Foo 옵션 1, Foo는 클래스 이름 또는 오브젝트 이름으로 규정되어야합니다. 옵션 2를 사용하면 클래스가 아닌 모듈이므로 오브젝트 참조를 작성할 수 없습니다. 동일한 이름을 가진 변수가 다른 모듈에 나타나면 컴파일러에서 이름 충돌 오류가 발생하지 않는 한 공용 변수를 모듈 이름으로 한정하지 않고 참조 할 수 있습니다. 예 :

Public Module1 

    Public Foo As String 

End Module 

Public Module2 

    Public Foo As String 

End Module 

Module2를 제거하면 Foo는 어디서나 규정되지 않은 호출이 가능합니다.

Foo = "Happy birthday" 

현재 Module2가있는 Foo는 이름이 서로 다른 변수를 가리키며 서로 다른 값을 나타내야합니다.

Module1.Foo = "Goodbye cruel world" 
Module2.Foo = "Hello new world" 
+0

답변이 완료되었습니다. 모두에게 감사드립니다. – user3568182