我不确定这是否正是您所需要的,但这允许您在不使用反射的情况下从 InterfaceMethod 调用 AnotherMethod。它仍然使用 Convert.ChangeType。
这个想法是使类的实现具有约束(此处为 Tin)。然后将 InterfaceMethod 的无约束类型 T 转换为 Tin。最后,您可以使用受约束的类型调用 AnotherMethod。以下适用于字符串。
public interface ITest
{
T InterfaceMethod<T> (T arg);
}
public interface ITest2
{
U AnotherMethod<U>(U arg) where U : class;
}
public class Test<Tin> : ITest, ITest2 where Tin : class
{
public T InterfaceMethod<T> (T arg)
{
Tin argU = arg as Tin;
if (argU != null)
{
Tin resultU = AnotherMethod(argU);
T resultT = (T)Convert.ChangeType(resultU,typeof(T));
return resultT;
}
return default(T);
}
public U AnotherMethod<U> (U arg) where U : class { return arg; }
}