Почему мой состав классов не работает во время выполнения?C#

Место общения программистов C#
Ответить
Anonymous
 Почему мой состав классов не работает во время выполнения?

Сообщение Anonymous »

Кажется, у меня не работает гипс, и я не понимаю, почему. Если бы кто-нибудь мог мне это объяснить, было бы очень хорошо.
Предположим, у меня есть такая иерархия классов:

Код: Выделить всё

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 void GetModule(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.GetModule(out TeleportActorModule teleportModule)
для актера, у которого есть PedestrianTeleportActorModule в списке модулей (в чем я уверен, поскольку у меня есть точка останова в методе GetModule()), метод GetModule() возвращает нулевой модуль.
Я уверен, что он выполняет итерацию по всему списку, поскольку присутствуют другие модули, и i увеличивается до конца списка.
Похоже, что приведение "as" похоже на для этого конкретного состава не удалось, потому что я не понимаю.
Если кто-нибудь что-нибудь знает, я буду очень признателен.
Спасибо,

Подробнее здесь: https://stackoverflow.com/questions/798 ... at-runtime
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»