Возможно, вы можете иметь дело с библиотекой отладки с функцией debug.getinfo ()
, если debug.getinfo (1) .what == "main" then - Main execution end
Для получения дополнительной информации см. справочное руководство.
Похоже, что .NET Framework 4.0 поддерживает ковариацию в общих интерфейсах и делегатах. Итак, мне удалось скомпилировать код, добавив общий интерфейс.
public interface IInterface
{
...
}
public class Class1 : IInterface
{
...
}
public interface IBase<out T> where T: IInterface
{
// Need to add out keyword for covariance.
}
public class Base<T> : IBase<T> where T : IInterface
{
...
}
public class Class2<T> : Base<T> where T : IInterface
{
...
}
.
.
.
public SomeMethod()
{
List<IBase<IInterface>> list = new List<IBase<IInterface>>();
Class2<Class1> item = new Class2<Class1>();
list.Add(item); // No compile time error here.
}
Нет, это не является законным в C #. C # 4 и выше поддерживают ковариацию и контравариантность общих интерфейсов и общих делегатов, когда они построены с использованием ссылочных типов. Например, IEnumerable<T>
является ковариантным, поэтому вы можете сказать:
List<Giraffe> giraffes = new List<Giraffe>() { ... };
IEnumerable<Animal> animals = giraffes;
, но не
List<Animal> animals = giraffes;
. Поскольку в список животных может быть включен тигр, но список жирафов не может.
Сделайте веб-поиск по ковариации и контравариантности на C #, и вы найдете много статей об этом.
вы не можете использовать generic типа this.list, это IInterface, но вы пытаетесь добавить Class1 в список. Это должно быть следующим:
List<Base<Class1>> list = new List<Base<Class1>>();
Class2<Class1> item = new Class2<Class1>();
list.Add(item);