我已经搜索并找到了当您有权更改现有接口定义时有意义的答案。就我而言,我没有这个能力。 我正在尝试使用泛型创建一个新对象,该泛型具有不受泛型方法约束的约束。 下面的代码说明了我想要做的事情(我可以在 MyImplementedClass 中进行反射或任何必要的操作,但其他的则更固定):
// This existing interface has no constraint (can't change)
public interface IExistingInterface
{
void ExistingMethod<T>();
}
public class MyImplementedClass : IExistingInterface
{
public void ExistingMethod<T>()
{
var howToDoThis = new ExistingClass<T>(); // Gives error that T must be a reference type
}
}
// This existing class has the following constraint (can't change)
public class ExistingClass<T> where T : class
{
}
我只是在代码中实现该限制,一旦确保类型满足该约束,就创建适当的类型并创建该类型的实例:
public class MyImplementedClass : IExistingInterface
{
public void ExistingMethod<T>()
{
if (!typeof(T).IsClass)
{
throw new InvalidOperationException();
}
var howToDoThis = Activator.CreateInstance(typeof(ExistingClass<>).MakeGenericType(typeof(T)));
}
}