我试图编写一个通用类,将一些类型传递给它,然后通过属性访问它。
我已经编写了这段代码:
class Factory<T1, T2> where T1 : Test, new()
where T2 : Test, new()
{
public T1 FirstType { get; set; }
public T2 SecondType { get; set; }
public Factory()
{
FirstType = new T1();
SecondType = new T2();
}
}
我正在像这样使用它(OtherTest实现了Test):
Factory<Test, OtherTest> factory = new Factory<Test, OtherTest>();
factory.FirstType.MyMethod();
然后我可以使用FirstType和SecondType属性,但是如果我更改顺序:
Factory<OtherTest, Test> factory2 = new Factory<OtherTest, Test>();
这将具有不同的行为,因为FirstType将是OtherTest。我想传递实例并能够编写如下代码:
Factory<Test, OtherTest> factory = new Factory<Test, OtherTest>();
factory.Test.MyMethod(); //I want to generate properties named after class
factory.OtherTest.MyMethod();
我可以在编译时这样做吗?
答案 0 :(得分:0)
您不能通过通用类型参数更改属性名称。最接近的是字典
Dictionary<string, Test> Tests;
然后,您可以使用typeof(T1).Name
和nameof
以安全的方式提供属性名称。
Tests.Add(typeof(T1).Name, new T1());
Test test = Tests[nameof(FirstType)];