自宅PCでVB2010 Expressを使用して書いたコードを、
会社PCのVB2005 Professionalで編集したりするのですが、
その際、VB2010ではコンパイル出来たコードがVB2005ではコンパイルできない事があります。
それで困ったのが以下のような場合です。
---------------- 以下ソースコード ----------------
Public Interface ISample
'何らかの処理
End Interface
Public Class Sample_01
Implements ISample
'何らかの処理
End Class
Public Class Sample_02
Implements ISample
'何らかの処理
End Class
Public Class Test
Public Sub ShowType(Sample As ISample)
'ここで、VB2005の場合のみコンパイルエラー
MsgBox(Sample.GetType().ToString)
End Sub
End Class
Public Class Form1
Private Sub Button1_Click()
Dim Test As New Test
Test.ShowType(New Sample_01)
Test.ShowType(New Sample_02)
End Sub
End Class
---------------- 以上ソースコード ----------------
全てのクラスは、「System.Object」から派生するので、全ての変数
においてGetType()する事が出来るはずなのですが、VB2005の場合、
Interface型の変数よりGetType()出来ません。これと同じ処理を実現
するにはどうすればよろしいでしょうか。ご存知の方がいらっしゃいましたら、助言を頂けると幸いです。
> Public Interface ISample
> '何らかの処理
> End Interface
インターフェイス内に「処理」を定義できましたっけ?
> これと同じ処理を実現するにはどうすればよろしいでしょうか。
(案1)
Public Class Test
Public Sub ShowType(Of T)(ByVal Sample As T)
MsgBox(GetType(T).ToString())
End Sub
End Class
(案2)
Public Class Test
Public Sub ShowType(ByVal Sample As ISample)
MsgBox(CObj(Sample).GetType().ToString())
End Sub
End Class
(案2改)
Public Class Test
Public Sub ShowType(Of T As ISample)(ByVal Sample As T)
MsgBox(Sample.GetType().ToString())
End Sub
End Class
(案3) (無理矢理)
Public Class Test
Public Sub ShowType(ByVal Sample As ISample)
MsgBox(CallByName(Sample, "GetType", CallType.Get).ToString())
End Sub
End Class
御世話になります。
>インターフェイス内に「処理」を定義できましたっけ?
ちょっとした「あや」です。すみません。
プロパティやメソッド等の「シグネチャ」の定義ですね。
なるほど。ジェネリックタイプを使うという手がありましたか。
毎度ながら、貴重なサンプルありがとうございます。