Shared(Visual Basic)Shared (Visual Basic)

하나 이상의 선언 된 프로그래밍 요소가 클래스 또는 구조체의 특정 인스턴스가 아닌 여러 클래스 또는 구조체와 연결 되도록 지정 합니다.Specifies that one or more declared programming elements are associated with a class or structure at large, and not with a specific instance of the class or structure.

주의Remarks

공유를 사용 하는 경우When to Use Shared

클래스 또는 구조체의 멤버를 공유 하면 비공유가 아닌 모든 인스턴스에서 사용할 수 있습니다. 여기서 각 인스턴스는 자체 복사본을 유지 합니다.Sharing a member of a class or structure makes it available to every instance, rather than nonshared, where each instance keeps its own copy. 이는 예를 들어 변수 값이 전체 응용 프로그램에 적용 되는 경우에 유용 합니다.This is useful, for example, if the value of a variable applies to the entire application. Shared변수를 선언 하는 경우 모든 인스턴스가 동일한 저장소 위치에 액세스 하 고 한 인스턴스가 변수의 값을 변경 하는 경우 모든 인스턴스에서 업데이트 된 값에 액세스 합니다.If you declare that variable to be Shared, then all instances access the same storage location, and if one instance changes the variable's value, all instances access the updated value.

공유는 멤버의 액세스 수준을 변경 하지 않습니다.Sharing does not alter the access level of a member. 예를 들어 클래스 멤버는 shared 및 private (클래스 내 에서만 액세스할 수 있음) 또는 비공유 및 public 일 수 있습니다.For example, a class member can be shared and private (accessible only from within the class), or nonshared and public. 자세한 내용은 Visual Basic의 액세스 수준을 참조 하세요.For more information, see Access levels in Visual Basic.

규칙Rules

  • 선언 컨텍스트입니다.Declaration Context. Shared는 모듈 수준에서만 사용할 수 있습니다.You can use Shared only at module level. 즉, Shared 요소에 대 한 선언 컨텍스트는 클래스 또는 구조체 여야 하며 소스 파일, 네임 스페이스 또는 프로시저일 수 없습니다.This means the declaration context for a Shared element must be a class or structure, and cannot be a source file, namespace, or procedure.

  • 결합 된 한정자입니다.Combined Modifiers. 동일한 선언에서 재정의, 재정의가능, NotOverridable, MustOverride또는 Static 과 함께 Shared를 지정할 수 없습니다.You cannot specify Shared together with Overrides, Overridable, NotOverridable, MustOverride, or Static in the same declaration.

  • 하.Accessing. 해당 클래스 또는 구조체의 특정 인스턴스의 변수 이름이 아니라 클래스 또는 구조체 이름으로 정규화 하 여 공유 요소에 액세스 합니다.You access a shared element by qualifying it with its class or structure name, not with the variable name of a specific instance of its class or structure. 클래스 또는 구조체의 인스턴스를 만들어 해당 공유 멤버에 액세스할 필요는 없습니다.You do not even have to create an instance of a class or structure to access its shared members.

    다음 예에서는 Double 구조에 의해 노출 IsNaN 공유 프로시저를 호출 합니다.The following example calls the shared procedure IsNaN exposed by the Double structure.

    If Double.IsNaN(result) Then MsgBox("Result is mathematically undefined.")

  • 암시적 공유.Implicit Sharing. Const 문에Shared 한정자를 사용할 수 없지만 상수는 암시적으로 공유 됩니다.You cannot use the Shared modifier in a Const Statement, but constants are implicitly shared. 마찬가지로 모듈 또는 인터페이스의 멤버를 Shared선언할 수 없지만 암시적으로 공유 됩니다.Similarly, you cannot declare a member of a module or an interface to be Shared, but they are implicitly shared.

동작Behavior

  • 저장할.Storage. 공유 변수나 이벤트는 해당 클래스 또는 구조체를 만든 인스턴스 수에 관계 없이 한 번만 메모리에 저장 됩니다.A shared variable or event is stored in memory only once, no matter how many or few instances you create of its class or structure. 마찬가지로 공유 프로시저 또는 속성은 하나의 지역 변수 집합만 보유 합니다.Similarly, a shared procedure or property holds only one set of local variables.

  • 인스턴스 변수를 통해 액세스 합니다.Accessing through an Instance Variable. 해당 클래스 또는 구조체의 특정 인스턴스를 포함 하는 변수의 이름으로 정규화 하 여 공유 요소에 액세스할 수 있습니다.It is possible to access a shared element by qualifying it with the name of a variable that contains a specific instance of its class or structure. 일반적으로 정상적으로 작동 하지만 컴파일러는 경고 메시지를 생성 하 고 변수 대신 클래스 또는 구조체 이름을 통해 액세스를 만듭니다.Although this usually works as expected, the compiler generates a warning message and makes the access through the class or structure name instead of the variable.

  • 인스턴스 식을 통해 액세스 합니다.Accessing through an Instance Expression. 클래스 또는 구조체의 인스턴스를 반환 하는 식을 통해 공유 요소에 액세스 하는 경우 컴파일러는 식을 계산 하는 대신 클래스 또는 구조체 이름을 통해 액세스를 만듭니다.If you access a shared element through an expression that returns an instance of its class or structure, the compiler makes the access through the class or structure name instead of evaluating the expression. 이렇게 하면 다른 작업을 수행 하 고 인스턴스를 반환 하는 식을 의도 한 경우 예기치 않은 결과가 생성 됩니다.This produces unexpected results if you intended the expression to perform other actions as well as returning the instance. 다음 예제에서는 이것을 보여 줍니다.The following example illustrates this.

    Sub main()  
        shareTotal.total = 10  
        ' The preceding line is the preferred way to access total.  
        Dim instanceVar As New shareTotal  
        instanceVar.total += 100  
        ' The preceding line generates a compiler warning message and  
        ' accesses total through class shareTotal instead of through  
        ' the variable instanceVar. This works as expected and adds  
        ' 100 to total.  
        returnClass().total += 1000  
        ' The preceding line generates a compiler warning message and  
        ' accesses total through class shareTotal instead of calling  
        ' returnClass(). This adds 1000 to total but does not work as  
        ' expected, because the MsgBox in returnClass() does not run.  
        MsgBox("Value of total is " & CStr(shareTotal.total))  
    End Sub  
    Public Function returnClass() As shareTotal  
        MsgBox("Function returnClass() called")  
        Return New shareTotal  
    End Function  
    Public Class shareTotal  
        Public Shared total As Integer  
    End Class  
    

    앞의 예제에서 컴파일러는 코드에서 인스턴스를 통해 total 공유 변수에 액세스 하는 두 번 모두 경고 메시지를 생성 합니다.In the preceding example, the compiler generates a warning message both times the code accesses the shared variable total through an instance. 각각의 경우에는 shareTotal 클래스를 통해 직접 액세스를 수행 하 고 인스턴스를 사용 하지 않습니다.In each case it makes the access directly through the class shareTotal and does not make use of any instance. returnClass프로시저에 대 한 의도 된 호출의 경우에는 returnClass에 대 한 호출을 생성 하지 않으므로 "함수 returnClass ()를 표시 하는 추가 작업이 수행 되지 않습니다.In the case of the intended call to the procedure returnClass, this means it does not even generate a call to returnClass, so the additional action of displaying "Function returnClass() called" is not performed.

Shared 한정자는 다음 컨텍스트에서 사용할 수 있습니다.The Shared modifier can be used in these contexts:

Dim 문Dim Statement

Event 문Event Statement

Function 문Function Statement

Operator 문Operator Statement

Property 문Property Statement

Sub 문Sub Statement

참고 항목See also