2012-07-29 1 views
0
여기

내 함수의 예입니다 : 기본적으로 그때 내 옆에있는 함수에서 결과를 사용할 수 내 기능 &을 실행해야 할 일함수를 다시 사용할 수 있도록 함수의 결과를 변수로 가져 오는 방법은 무엇입니까?

Public Class GlobalFunctions 

Public Shared Function CreateNewDatabase(ByVal MyDomainName As String, ByVal NewDatabaseName As String, ByVal StatusBoxName As ListBox) 

    Try 

     Dim MyWorkingDirectory As String = "C:\mytest1\" 
     Dim MyFileName As String = "mycmd.exe" 

     If File.Exists(MyWorkingDirectory & MyFileName) Then 

      'Run mycmd 

      'Here are my results 
      Dim Result1 As String = "r2" 
      Dim Result2 As String = "r2" 
      Dim Result3 As String = "r3" 

     End If 

    Catch ex As Exception 

     MsgBox(ex.Message) 

    End Try 

    Return True 

End Function 

End Class 

.. 뭔가 같은 :

GlobalFunctions.CreateNewDatabase(DomainName.Text, MyDbName, StatusListBox) 
    MsgBox(Result1) 
    MsgBox(Result2) 
    MsgBox(Result3) 

어떤 도움을 많이 주시면 감사하겠습니다.)

답변

0

클래스의 Result1, Result2, Result3 속성을 만들고 CreateNewDatabase()에 설정해야합니다. 그럼 당신은 그들을 얻을 수 있습니다 GlobalFunctions.Result1

하지만 그것은 끔찍한 보인다.

0

두 가지 주요 옵션이 있습니다. 첫 번째 방법은 나중에 사용할 값을 반환하는 것입니다. 이렇게하려면 사용할 세 개의 값에 대한 속성을 가진 클래스를 만들거나이 함수의 사용이 제한적일 경우 을 반환하는 것이 좋습니다 (예 : Tuple(Of String, String, String))

다른 옵션은 클래스 수준 속성을 만들고 CreateNewDatabase 함수에서 해당하는 배경 필드를 설정하는 것입니다. 이것의 가장 큰 단점은 미래의 함수 호출로이 값들이 덮어 쓰여질 것이라는 것입니다. 또한 프로그래머가 세 가지 속성이 메서드에서 설정되었음을 알게하여 API에 몇 가지 발견 가능성 문제를 소개합니다.

-1

글쎄, 분명히 가장 쉬운 방법은 실제로 글로벌 변수로 선언하는 것입니다. 실제로는 너무 환영받지 못하는 것 같습니다.

Public Class Form1 

Dim Result1 As String 
Dim Result2 As String 
Dim Result3 As String 

GlobalFunctions.CreateNewDatabase(DomainName.Text, MyDbName, StatusListBox) 
MsgBox(Result1) 
MsgBox(Result2) 
MsgBox(Result3) 


etc.. 
etc... 

end class 

가장 좋은 방법은 아니지만 작업이 완료됩니다.

+0

이것이 "너무 환영"되지 않는 몇 가지 좋은 이유가 있습니다. 당신이 제안하는 방식으로 전역 변수를 사용하는 것은 스레드로부터 안전하지 않습니다. 또한 실제로 전역 변수를 사용하지 않고 있습니다 (예 : private 멤버 변수 사용). –

관련 문제