향후 열거 형 값 및/또는 클래스를 허용한다는 목표에 대한 설명을 기반으로 간단한 해법은 기본 열거 형에 키가있는 대리인 사전을 사용하는 것입니다.
이
Public Class Class1
Public Enum WorkDay
Monday
Tuesday
Wednesday
Thursday
Friday
End Enum
Public Shared Sub Method_Monday()
End Sub
Public Shared Sub Method_Tuesday()
End Sub
Public Shared Sub Method_Wednesday()
End Sub
Public Shared Sub Method_Thursday()
End Sub
Public Shared Sub Method_Friday()
End Sub
End Class
Public Class Class2
Public Enum NotWorkDay
Saturday
Sunday
End Enum
Public Shared Sub Method_Saturday()
End Sub
Public Shared Sub Method_Sunday()
End Sub
End Class
그리고 위의 클래스를 사용하여 클래스 (이 경우의 WinForm)는, 다음과 같이 보일 것입니다 :
이
Public Class Form1
' declare the delegate dictionary
Private WorkMethods As New Dictionary(Of [Enum], Action)
Public Sub New()
InitializeComponent()
SetWorkMethods()
End Sub
Private Sub SetWorkMethods()
'fill the dictionary with the needed actions
WorkMethods.Add(Class1.WorkDay.Monday, New Action(AddressOf Class1.Method_Monday))
WorkMethods.Add(Class1.WorkDay.Tuesday, New Action(AddressOf Class1.Method_Tuesday))
WorkMethods.Add(Class1.WorkDay.Wednesday, New Action(AddressOf Class1.Method_Wednesday))
WorkMethods.Add(Class1.WorkDay.Thursday, New Action(AddressOf Class1.Method_Thursday))
WorkMethods.Add(Class1.WorkDay.Friday, New Action(AddressOf Class1.Method_Friday))
WorkMethods.Add(Class2.NotWorkDay.Saturday, New Action(AddressOf Class2.Method_Saturday))
WorkMethods.Add(Class2.NotWorkDay.Sunday, New Action(AddressOf Class2.Method_Sunday))
End Sub
' a helper method to retrieve and execute the action
Private Sub DoWork(day As [Enum])
Dim actionToPerform As Action = Nothing
If WorkMethods.TryGetValue(day, actionToPerform) Then
If actionToPerform IsNot Nothing Then actionToPerform()
End If
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
DoWork(Class1.WorkDay.Wednesday)
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
DoWork(Class2.NotWorkDay.Saturday)
End Sub
End Class
이러한 사용은 당신을 제공
이 같은 클래스 선언을 가정 변경이 필요할 때 Select-Case 블록을 다시 작성해야 할 필요없이 호출 된 메서드를 구성 할 수있는 많은 유연성이 있습니다. 사전에 항목을 추가/삭제하면됩니다.
왜'Method'는'WorkDay'를 인수로 사용하지 않습니까? 그런 다음 하나의 메소드와 하나의 호출 만 필요합니다. 부가 메모 : 이미 ['DayOfWeek'-enum] (https://msdn.microsoft.com/en-us/library/system.dayofweek (v = vs.110) .aspx)이 있으며 현재 ['DateTime.DayOfWeek'] (https://msdn.microsoft.com/en-us/library/system.datetime.dayofweek (v = vs.110) .aspx) :'Dim dow = Date.Today.DayOfWeek ' –
당신은 이것을 망에서 보았을 때 shure하고 있습니까?자바에서 enum은 메소드를 가질 수 있고 enum-s 메소드는 인터페이스를 구현할 수 있습니다. – k3b
수업 열거 형을 찾는 것처럼 들리십니까? 그리고 이러한 클래스가 Class1.WorkDay.GetMood()를 호출 할 수 있도록 특정 인터페이스를 구현하고 싶습니까? 나는 .Net에서 그런 것을 보지 못했다. 아마 당신은 속성을 사용하여 이와 비슷한 것을 보았을 것입니까? http://stackoverflow.com/questions/25323406/calling-a-method-by-enum-attribute-in-c-sharp –