ответ
http://igoro.com/archive/fun-with-c-generics-down-casting-to-a-generic-type/
Посмотрите на указанную ссылку.
Также подумайте, что ссылка, которую @Barry опубликовала, будет моим вторым выбором для ссылок, потому что это очень простой пример для подражания.
Вы просто использовать обычный (литой) оператор:
class HigherTypeInHierarchy {}
class LowerTypeInHierarchy : HigherTypeInHierarchy {}
var lowerTypeInHierarchy = new LowerTypeInHiearchy();
// OK downcast:
HigherTypeInHierarchy someObject = lowerTypeInHierarchy;
var okDowncast = (LowerTypeInHiearchy)someObject; // OK
Конечно, для актеров, чтобы быть действительным, объект вы пытаетесь бросить должны быть типа вы разыгрываете, или вы получите исполняемая Исключение:
class AnotherLowerTypeInHierarchy : HigherTypeInHierarchy {}
var anotherLowerTypeInHierarchy = new AnotherLowerTypeInHiearchy();
// Failing downcast:
HigherTypeInHierarchy someObject = anotherLowerTypeInHierarchy;
var failedDowncast = (LowerTypeInHiearchy)someObject; // Exception!
Если вы просто хотите «попробовать-бросок» (то есть готовы справиться с ситуацией, когда тип вы пытаетесь обратное приведение в действительности не обозначенного типа, используйте в -cast вместо:
var lowerTypeInHiearchyOrNULL = someObject as LowerTypeInHiearchy;
Downcasting, как правило, плохая идея, поскольку подразумевает знание типа вне системы типов. Предполагается, что операции над более высокими уровнями в иерархии будут одинаково работать для всех производных типов (см. Liskov substitution principle), но с помощью понижающего преобразования вы указываете противоположное требование о том, что тип является фактически определенным производным типом).
Class Animal { }
Class Dog : Animal { }
Dog dog = new Dog();
Animal animal = dog; //upcasting
Dog sameDog = (Dog)animal; //Downcasting
- 1. переинтерпретировать отлит в с
- 2. Тип отлит в Haskell
- 3. Replace отлит вызова функции в C++
- 4. C++ отлит перераспределить вызывает утечку памяти
- 5. SQLite и Int64 на Int32 отлит в C#
- 6. разворачивания Int в строку отлит в Swift
- 7. Как отлит из GroupPrincipal базы для GroupPrincipalsEx
- 8. Как прокрутить вниз раздел в Selenium (C#)?
- 9. не может быть отлит [Ljava.lang.Comparable
- 10. java.lang.Long не может быть отлит в java.lang.String
- 11. Обеспечить количество правильно отлит в .NET
- 12. Объект не может быть отлит в ArrayList
- 13. не может быть отлит в android.widget.RelativeLayout
- 14. Анализ сверху вниз в C#
- 15. Тип безопасности: Переполнение отлит в обобщенном классе
- 16. Не может отлит из строки в Boolean
- 17. Android, не может быть отлит в setOnItemClickListener
- 18. Не может отлит из Throwable в MyException
- 19. ошибка синтаксиса при отлит в ЭКСТРАКТОМ
- 20. Класс не может быть отлит в java.lang.reflect.ParameterizedType
- 21. Не может отлит из объекта в булевых
- 22. как отлит из одного типа в другой в с
- 23. C# вниз литье вопрос
- 24. Перемещение объекта вниз, C#
- 25. Изображения Масштабирование вниз в ничья в C#
- 26. sbyte [] может быть магически отлит by byte []
- 27. Не может отлит из двойной Int
- 28. Прокрутите вниз до C# DataGridView
- 29. Прокрутите вниз до C# TextBox
- 30. java.lang.String не может быть отлит в java.util.HashMap exception
где класс LowerTypeInHiearchy {/ * код * /} и класс HigherTypeInHierarchy: LowerTypeInHiearchy {/ * код * /} –
@ralf Да, это должно быть указано, - пример отредактирован соответственно. – Cumbayah