メソッドをテストしようとしていますが、エラーが発生します:
new() 制約がないため、変数タイプ 'Item' のインスタンスを作成できません。
必要な情報は以下の通りです:
public interface IHasRect
{
Rectangle Rectangle { get; }
}
ヘルパークラス:
class Item : IHasRect
{
public Item(Point p, int size)
{
m_size = size;
m_rectangle = new Rectangle(p.X, p.Y, m_size, m_size);
}
}
関数をテストするには、オブジェクトをインスタンス化する必要があります...
public class SomeClass<T> where T : IHasRect
テスト:
public void CountTestHelper<Item>() where Item : IHasRect
{
Rectangle rectangle = new Rectangle(0, 0, 100, 100);
SomeClass<Item> target = new SomeClass<Item>(rectangle);
Point p = new Point(10,10);
Item i = new Item(p, 10); // error here
...
}
[TestMethod()]
public void CountTest()
{
CountTestHelper<Item>();
}
このエラーの意味や修正方法を理解しようとしています。http://msdn.microsoft.com/en-us/library/d5x73970.aspxそしてhttp://msdn.microsoft.com/en-us/library/x3y47hd4.aspx- しかし、それは役に立ちません。
このエラーの意味がわかりません。すでに「SomeClass」を 型に制限しています。Test クラス全体 (Visual Studio によって生成された、すべてのテストを含む単体テスト クラス) を制限することはできません。そうしないと、他のエラーが多数発生します。Item クラスにはテンプレートがありません...
ベストアンサー1
new
キーワードを使用してデフォルト コンストラクターを実装するようにマークしない限り、ジェネリック型オブジェクトを初期化することはできません。
public void CountTestHelper<Item>() where Item : IHasRect, new()
{
Rectangle rectangle = new Rectangle(0, 0, 100, 100);
SomeClass<Item> target = new SomeClass<Item>(rectangle);
Point p = new Point(10,10);
Item i = new Item(); // constructor has to be parameterless!
...
}
一方、Item
アプリケーション内の別の場所で定義された型オブジェクトを初期化しようとしている場合は、その前に名前空間を使用してみてください。
MyAppNamespace.Item i = new MyAppNamespace.Item(p, 10);