Это может быть глупый вопрос, и я не нуждаюсь в этом ни за что, но мне было просто интересно ...Cast экземпляр универсального типа в «шаблон» экземпляр
Лучший способ описать это с помощью пример, так вот:
using System;
namespace GenericExample
{
public interface IFoo { }
public interface IFoo2 { }
public class Foo1: IFoo , IFoo2 { }
public class Foo2 : IFoo, IFoo2 { }
public class MyGeneric<T> where T : IFoo , IFoo2, new() { }
internal class Program
{
public static void Main(string[] args)
{
MyGeneric<Foo1> obj1 = new MyGeneric<Foo1>();
MyMethod(obj1);//I can treat obj1 as MyGeneric<T> in MyMethod
MyGeneric<Foo2> obj2 = new MyGeneric<Foo2>();
//But can I use is as MyGeneric<T> in this method???
//MyGeneric<?> obj3 = null;
//obj3 = (MyGeneric<?>)obj1;
//obj3 = (MyGeneric<?>)obj2;
Console.ReadLine();
}
public static void MyMethod<T>(MyGeneric<T> arg) where T : IFoo, IFoo2, new()
{
}
}
}
Я не думаю, что это можно рассматривать в качестве obj1 MyGeneric < T> в главном
, но в то же время он чувствует себя странно, так как я могу передать его как MyGeneric < Т> аргумент
Что вы подразумеваете под «treat obj1 as MyGeneric < T>», что вы хотите делать с 'obj1' в' Main'? –
@YacoubMassad Я обновил example.Imagine T реализует интерфейс (или больше). Могу ли я создать переменную MyGeneric <"T"> и указать s на любую конкретную реализацию? Опять же, мне это не нужно, мне было любопытно, есть ли способ сделать этот компилятор –