チャットで誰かと関連事項について話し合っていたところ、予想とは異なる動作をするこのコードを思いつきました。
class Program
{
static void Main(string[] args)
{
new Test<SomeObject>();
Console.ReadKey();
}
}
class SomeObject
{
public SomeObject() { }
public new string ToString()
{
return "Hello world.";
}
}
class Test<T> where T : new()
{
public Test()
{
T t = new T();
object t1 = t;
Console.WriteLine(t.ToString());
Console.WriteLine(t1.ToString());
}
}
出力は次のとおりです。
<ProjectName>.SomeObject
<ProjectName>.SomeObject
最初の行はジェネリック型から書かれているので、SomeObjectで定義されたToString()メソッドを使用することを期待していました。これは、実行時に型がどうなるかということです。