Ognacの雑感

木漏れ日々

目次

Blog 利用状況

書庫

ギャラリ

ジェネリックの有難さ(ジェネリック関連その3)

ジェネリックの制約は複数指定が可能なんですね。
Public Class TT(Of T)
    Sub New(z as T)
        z.GetType()
        z.ToString()
    End Sub
End Class
これだと, z.GetType()/ToString()といった Object.Methodが使えます。

ジェネリック側で,T-インスタンスを作るときは,
Public Class TT(Of T As New)
    Sub New()
        Dim z As New T
    End Sub
End Class
と書きます。

もっとアプリ的なメソッドの実行をジェネリック側でさせたいときは, MyMethod()を持つクラスMyCls()を作って
Public Class Ta(Of T As MyCls)
    Sub New()
        Dim z As T
        z.MyMethode()
    End Sub
End Class
と書いていました。   「as制約は一つのみ」と謂れのない思い込みがあり,
  ジェネリック内でのインスタンス生成を諦めたりして,回りくどいコードを書いたりしてました。

ところが,記事をよくよんでいくと,  { x,x,x} なるキーワードで複数の制約指定が可能と記載されています。
早速.
'*********
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim zz As cls = Nothing
        Dim c As New TCLS(Of cls)(zz)
        MessageBox.Show(c.ToString)
    End Sub
End Class
'*********
Public Interface AB
    Function 加算(ByVal a As Integer, ByVal b As Integer) As Integer
End Interface
'*********
Public Class cls
    Inherits List(Of cls)
    Implements AB
    '*********
    Public Function 加算(ByVal a As Integer, ByVal b As Integer) As Integer Implements AB.加算
        Return a + b
    End Function
End Class
'*********
Public Class TCLS(Of T As {List(Of T), New, AB})
    Private wz3 As T
    Sub New(ByVal z3 As T)
        z3 = New T
        wz3 = z3
        Dim k1 As New T : z3.Add(k1)
        Dim k2 As New T : z3.Add(k2)
        Dim j As Integer = z3.加算(3, 4)
        Dim cnt As Integer = z3.Count
    End Sub
    Public Overrides Function ToString() As String
        Dim txt As String
        txt = "要素数:" + wz3.Count.ToString + vbNewLine
        txt += "wz3(34,45)=" + wz3.加算(34, 45).ToString + vbNewLine
        txt += "型:" + MyBase.ToString
        txt += "型:" + TypeName(wz3)
        Return txt
    End Function
End Class

このように、インターフェースを活用すれば, ジェネリック側でアプリ的ロジックを持たせられる可能性がでてきました。
メインソースからの,ソースの隔離がより以上に可能になります。
 調子に乗って,深みにハマるとシッペ返しがありそうですが, お気に入りの一つになりました。

 

 

投稿日時 : 2007年1月5日 14:53

Feedback

No comments posted yet.
タイトル
名前
Url
コメント