Предположим, у меня есть такая иерархия классов:
Код: Выделить всё
public abstract class ParameterlessActorModule : IActorModule, IParameterlessActorModule
where t_module : ParameterlessActorModule
Код: Выделить всё
public class BaseTeleportModule : ParameterLessTeleportModule where t_param : BaseTeleportModule, ITeleport
Код: Выделить всё
public class TeleportActorModule : BaseTeleportModule
Код: Выделить всё
public sealed class PedestrianTeleportActorModule : TeleportActorModule
Код: Выделить всё
public class Actor
{
List _modules;
// Some initialization code where I stuff the PedestrianTeleportModule inside the _modules list.
public bool TryGetModule(out T module) : where T : class, IActorModule
{
int modulesCount = _modules.Count;
for (int i = 0; i < modulesCount; ++i)
{
module = _modules[i] as T;
if (module != null)
{
return true;
}
}
module = null;
return false;
}
Код: Выделить всё
actor.TryGetModule(out TeleportActorModule teleportModule)
Я уверен, что он выполняет итерацию по всему списку, поскольку присутствуют другие модули, и i увеличивается до конца списка.
Похоже, что приведение "as" похоже на провал для этого конкретного состава, потому что я не понимаю.
Подробнее здесь: https://stackoverflow.com/questions/798 ... at-runtime
Мобильная версия