2011-08-23 6 views
0

이 공유 메서드의 목록은 메서드 수명 동안 유지됩니까? 또는이 메소드가 호출 될 때마다 새 목록이 작성됩니까?공유 메서드의 로컬 변수가 C의 정적 변수처럼 작동합니까?

Protected Shared Function newResxNodes(ByVal newName As String, ByVal newValue As String, Optional ByVal newComment As String = "") As List(Of ResXDataNode) 

    Dim newResxNodesList As List(Of ResXDataNode) = New List(Of ResXDataNode) 

    Dim newResxNode As ResXDataNode = New ResXDataNode(newName, newValue) 
    If newComment <> String.Empty Then 
     newResxNode.Comment = newComment 
    End If 

    newResxNodesList.Add(newResxNode) 

    Return newResxNodesList 
End Function 

답변

0

아니요, C의 정적 변수처럼 작동하지 않습니다. 모든 호출에 대해 새로운 목록이됩니다. 목록 및 목록 항목을 유지하려면 공유 클래스 필드를 만듭니다.

+0

공유 클래스 (및 변수)가 해당 웹 페이지의 모든 세션/인스턴스에서 액세스 할 수 있다는 사실을 알고있었습니다. 마찬가지로 그 사용자의 세션에 반대, 내가 무엇을 목표로했는지. – dotnetN00b

+0

@ dotnetN00b 정적 필드로서의리스트조차도 각 포스트 백에서 파괴되고 다시 만들어 질 것이다. 사용자 세션뿐만 아니라 웹 애플리케이션에서 목록을 공유하려는 경우 애플리케이션 상태 컬렉션을 살펴보십시오. 'Application [ "someKey"] = list'이 msdn 페이지를 확인하십시오. http://msdn.microsoft.com/en-us/library/ms178594.aspx –

+0

bar와 같은 보호 된 공유 기능 foo (x는 문자열) C#에서 내부 정적 Bar Foo (string x). 어느 경우에도 메소드 호출 자체의 외부에 유지되는 메소드의 내부 범위 변수는 없습니다. 또한 VB에서 공유 메서드 만 사용하여 클래스를 만드는 경우 모듈로 만들고 Shared 키워드를 제거합니다. 이렇게하면 C#의 정적 클래스에서 수행해야하는 것처럼 기본 공용 생성자도 제거됩니다. 싱글 톤 개체를 원하면 클래스 수준에서 공유/정적으로 선언하고 Lazy (Of T)를 사용하여 단일 활성화를 지원하십시오. –

0

나는 테스트를 완료했으며 3 줄을 반환합니다.

Module Module1 

Class b 

    Public Sub New() 
     Console.WriteLine("New") 
    End Sub 

End Class 

Class a 

    Public Shared Sub Test() 

     Dim c As b = New b 

    End Sub 

End Class 

Sub Main() 

    a.Test() 
    a.Test() 
    a.Test() 

    Console.ReadLine() 

End Sub 

End Module 
+0

나는 그것을 놓쳤을지도 모른다. 하지만 방법을 3 번 호출 했으므로 3 줄을 반환하면 안됩니다. – dotnetN00b

+0

귀하의 질문을 정확하게 이해하지 못할 수도 있습니다. 목록을 작성하는 대신 새 B를 작성했습니다. 목록과 마찬가지로 함수가 호출 될 때마다 작성됩니다. "이 방법을 호출 할 때마다 새 목록이 작성됩니까?"라는 질문을 받으면 대답은 '예'입니다. –

+0

Ah. 내가 참조. 내 오해. 고맙습니다. – dotnetN00b

관련 문제