ジェネリック型パラメータの制約に「new」ってあったよ

ネタ元:Chapter2 ジェネリック(9/9) - @IT

今までリフレクションでやってたけど、こいつは便利だ。

using System;

namespace GenericSample
{
    class Program
    {
        static void Main(string[] args)
        {
            var h = new Foo<Bar>();
            Console.WriteLine(h.Value);
        }
    }

    class Foo<T> where T : new()
    {
        public T Value = new T();
    }

    class Bar
    {
        private readonly string Value;

        public Bar()
        {
            Value = "Bar";
        }

        public override string ToString()
        {
            return Value;
        }
    }
}

詳しくはMSDN
http://msdn.microsoft.com/ja-jp/library/d5x73970.aspx


おまけ

Class Program
    Shared Sub Main()
        Dim h = New Foo(Of Bar)
        Console.WriteLine(h.Value)
    End Sub
End Class

Class Foo(Of T As New)
    Public Value As T = New T()
End Class

Class Bar
    Private ReadOnly Value As String

    Public Sub New()
        Value = "Bar"
    End Sub

    Public Overrides Function ToString() As String
        Return Value
    End Function
End Class