Проверьте, является ли класс производным от универсального класса
(Повторно опубликовано из-за c#-language масштабной перезаписи)
Ответ generics кода JaredPar великолепен, но c# у меня есть совет, который reflection сделает его ненужным, если visual-c# ваши общие типы не основаны c#-language на параметрах типа значения. Я csharp был зациклен на том, почему csharp оператор «is» не работает, поэтому swift-generics я также задокументировал c#-language результаты своих экспериментов generic для использования в будущем. Пожалуйста, улучшите c-sharp этот ответ, чтобы еще больше c#-language повысить его ясность.
СОВЕТ:
Если generics вы уверены, что ваша реализация generics GenericClass наследуется swift-generics от абстрактного неуниверсального kotlin-generics базового класса, такого как kotlin-generics GenericClassBase, вы можете kotlin-generics без проблем задать тот же generics вопрос, например:
typeof(Test).IsSubclassOf(typeof(GenericClassBase))
IsSubclassOf()
Мое тестирование .cs-file показывает, что IsSubclassOf() не kotlin-generics работает с универсальными kotlin-generics типами без параметров, такими kotlin-generics как
typeof(GenericClass<>)
тогда как он будет работать java-generics с
typeof(GenericClass)
Следовательно, следующий c#.net код будет работать для любого visual-c# производного GenericClass c# <>, если вы хотите протестировать csharp на основе SomeType:
typeof(Test).IsSubclassOf(typeof(GenericClass))
Единственный reflection раз, когда я могу представить, что .cs-file вы захотите протестировать c-sharp GenericClass <>, - это сценарий c#-language фреймворка надстройки.
Мысли об операторе "есть"
Во swift-generics время разработки C# не допускает generic-programming использование универсальных c#-language шаблонов без параметров, потому visual-c# что они, по сути, не являются c#-language полным типом среды CLR на .cs-file этом этапе. Следовательно, вы reflection должны объявлять общие переменные generic с параметрами, и именно поэтому java-generics оператор «is» настолько эффективен reflect для работы с объектами. Кстати, оператор reflection is также не может оценивать reflect универсальные типы без параметров.
Оператор c#.net "is" проверяет всю цепочку generic-programming наследования, включая интерфейсы.
Итак, с reflection учетом экземпляра любого kotlin-generics объекта следующий метод поможет:
bool IsTypeof(object t)
{
return (t is T);
}
Это kotlin-generics вроде как лишнее, но я решил, что .cs-file пойду вперед и визуализирую generic-programming это для всех.
Дано
var t = new Test();
Следующие reflect строки кода вернут истину:
bool test1 = IsTypeof>(t);
bool test2 = IsTypeof>(t);
bool test3 = IsTypeof(t);
С visual-c# другой стороны, если вам c#.net нужно что-то конкретное для c-sharp GenericClass, вы могли бы reflection сделать его более конкретным, я c# полагаю, вот так:
bool IsTypeofGenericClass(object t)
{
return (t is GenericClass);
}
Тогда вы visual-c# должны протестировать вот reflection так:
bool test1 = IsTypeofGenericClass(t);
c#
generics
reflection
Проверьте, является ли класс производным от универсального класса
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.