Я ищу способ приведения объекта к простому интерфейсу и к универсальному интерфейсу, который вытекает из простого.
Вот мой пример:
interface INonGeneric
{
}
interface IGeneric<T> : INonGeneric where T : ITypeParameter
{
T Build();
}
interface ITypeParameter
{
}
class TypeClass : ITypeParameter
{
}
Так что это дизайн, с которым я пытаюсь работать. Если мое понимание дженериков неверно, как я полагаю, ошибка, надеюсь, будет очевидна для вас.
Затем я создаю классы, которые хочу использовать:
class MyClass : MyClassBase<TypeClass>
{
public override TypeClass Build()
{
return new TypeClass();
}
}
abstract class MyClassBase<T> : IGeneric<T> where T : ITypeParameter
{
public abstract T Build();
}
А потом я пытаюсь разыграть их так:
void Main()
{
var myClass = new MyClass();
var cast1 = myClass as INonGeneric;
if(cast1 != null) Console.WriteLine("cast 1 works!"); //THIS WORKS
var cast2 = TestCast<ITypeParameter>(myClass);
if(cast2 != null) Console.WriteLine("cast 2 works!"); //THIS DOES NOT WORK
}
Любая помощь будет принята с благодарностью.
edit: извините, я забыл поместить в метод TestCast. Вот оно:
IGeneric<T> TestCast<T>(INonGeneric obj) where T : ITypeParameter
{
return obj as IGeneric<T>;
}