簡體   English   中英

如何在C#中從泛型創建對象

[英]How to create an Object from Generics in c#

我試圖用相同的方法但邏輯不同的方法測試一些類,所以我想創建一個通用的測試用例。 我該如何實例化泛型方法?

我的例子:

[TestClass]
public class GenericTest<T : MyBuilder>
{
  T target;

  [TestInitialize()]
  public void MyTestInitialize()
  {
      target = new T(param1, param2, param3, param4); // here i'm obviosly stuck
  }

  [TestMethod]
  public void TestMethodBuilder()
  {
      Assert.AreEqual<string>(GetNameAsItShouldBe(),target.BuildName());
  }

  abstract public string GetNameAsItShouldBe();
}

那么我該如何實例化課程呢? 我具有較強的Java背景知識,因此我的代碼可能與c#不兼容。

對於帶有參數的構造函數,必須使用反射:

public class GenericTest<T> where T : MyBuilder
{
    [TestInitialize]
    public void Init()
    {
        target = (T)Activator.CreateInstance(typeof(T), new object[] { param1, param2, param3, param4 });
    }
}

您還可以指定T具有無參數構造函數

public class GenericTest<T : MyBuilder> where T: new()

這將確保您的T具有默認構造函數,並允許您在TestInitialize對其進行訪問。 請參閱http://msdn.microsoft.com/en-us/library/d5x73970.aspx

但是,如果您不想指定該參數,則可以在T上定義一個工廠方法,即

interface IBuildGenerically<T1, T2, T3, T4>
{
    T Build(T1 param1, T2 param2, T3 param3, T4 param4);
}

public class GenericTest<T : MyBuilder> 
  where T: IBuildGenerically<int, string, int, bool>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM