Мне нужно это, чтобы при создании экземпляра типа компилятор узнал, что тип реализует IInterface.
Ниже я покажу вам два возможных способа полученияСписок type
тех классов, которые реализуют IInterface
.Поэтому при создании нового объекта вы можете использовать этот список, чтобы решить, реализует ли этот класс IInterfce
или нет.
- Решение времени компиляции
Если вы хотите решение во время компиляции, вы должны иметь List<IInterface>
, тогда в этот список будут включены только те объекты классов, которые реализуют IInterface
.Имея этот список (в котором есть только те объекты классов, которые реализуют IInterface
, используйте этот список для подготовки списка типов.
Например:
class Demo
реализует IInterface
и Demo2
нет.
List<IInterface> listOfIInterface = new List<IInterface>();
listOfIInterface.Add(new Demo());
listOfIInterface.Add(new Demo2()); //this line will have compile time error
теперь используйте этот список для подготовки списка типов
List<Type> listOfIInterfaceType = new List<Type>();
foreach(object obj in listOfIInterface)
{
listOfIInterfaceType.Add(obj.GetType());
}
Если вам нужно более динамичное и динамическое решение для вашей проблемы, попробуйте это.
Если существует несколько классов, и вы хотите знать, какой класс реализует IInterface
, и выбрать тип этого класса всписок. Вы можете попробовать следующий код.
Предположим, есть два класса Demo
и Demo2
. Demo
реализует IInterface
, в то время как Demo2
нет.
если у вас есть объект обоих классов, вы помещаете их в список Object
и зацикливаете этот список и выполняете следующую логику.
List<object> listOfObject = new List<object>();
listOfObject.Add(new Demo()); //Demo Implements IInterface
listOfObject.Add(new Demo2());//Demo2 doesn't Implement IInterface
//this will have all possible types
List<Type> listOfAllType = new List<Type>();
//this will have type of those class, which implement interface
List<Type> listOfInterfaceType = new List<Type>();
//this will have objet of those class, which implement interface.
List<object> listOfInterfaceObject = new List<object>();
foreach (object obj in listOfObject)
{
Type type = obj.GetType();
if (!listOfAllType.Contains(type))
listOfAllType.Add(obj.GetType());
IInterface testInstance = obj as IInterface;
if (testInstance != null)
{
if (!listOfInterfaceType.Contains(type))
listOfInterfaceType.Add(type);
if (!listOfInterfaceObject.Contains(obj))
listOfInterfaceObject.Add(obj);
}
}
Обратите внимание, что если какой-либо класс не реализует интерфейс, это объектне может быть приведен к ИнтерфейсуКласс не реализует интерфейс.