using System;
using System.Collections.Generic;
namespace BaseClassTester
{
public class Program
{
abstract class SuperClass<T> where T : SuperDataClass
{
}
abstract class SuperDataClass
{
}
class DataClassA : SuperDataClass
{
}
class ClassA : SuperClass<DataClassA>
{
}
class DataClassB : SuperDataClass
{
}
class ClassB : SuperClass<DataClassB>
{
}
static void Main()
{
bool res = IsBasedOnSuperClass(typeof(ClassA));
Console.WriteLine("{0}: {1}", typeof(ClassA), res);
bool res2 = IsBasedOnSuperClass(typeof(List<int>));
Console.WriteLine("{0}: {1}", typeof(List<int>), res2);
}
static bool IsBasedOnSuperClass(Type type)
{
Type type2 = type; // type is your type, like typeof(ClassA)
while (type2 != null)
{
if (type2.IsGenericType &&
type2.GetGenericTypeDefinition() == typeof(SuperClass<>))
{
return true;
}
type2 = type2.BaseType;
}
return false;
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKCm5hbWVzcGFjZSBCYXNlQ2xhc3NUZXN0ZXIKewogICAgcHVibGljIGNsYXNzIFByb2dyYW0KICAgIHsKICAgICAgICBhYnN0cmFjdCBjbGFzcyBTdXBlckNsYXNzPFQ+IHdoZXJlIFQgOiBTdXBlckRhdGFDbGFzcwogICAgICAgIHsKICAgICAgICB9CgogICAgICAgIGFic3RyYWN0IGNsYXNzIFN1cGVyRGF0YUNsYXNzCiAgICAgICAgewogICAgICAgIH0KCiAgICAgICAgY2xhc3MgRGF0YUNsYXNzQSA6IFN1cGVyRGF0YUNsYXNzCiAgICAgICAgewogICAgICAgIH0KCiAgICAgICAgY2xhc3MgQ2xhc3NBIDogU3VwZXJDbGFzczxEYXRhQ2xhc3NBPgogICAgICAgIHsKICAgICAgICB9CgogICAgICAgIGNsYXNzIERhdGFDbGFzc0IgOiBTdXBlckRhdGFDbGFzcwogICAgICAgIHsKICAgICAgICB9CgogICAgICAgIGNsYXNzIENsYXNzQiA6IFN1cGVyQ2xhc3M8RGF0YUNsYXNzQj4KICAgICAgICB7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgdm9pZCBNYWluKCkKICAgICAgICB7CiAgICAgICAgICAgIGJvb2wgcmVzID0gSXNCYXNlZE9uU3VwZXJDbGFzcyh0eXBlb2YoQ2xhc3NBKSk7CiAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJ7MH06IHsxfSIsIHR5cGVvZihDbGFzc0EpLCByZXMpOwoKICAgICAgICAgICAgYm9vbCByZXMyID0gSXNCYXNlZE9uU3VwZXJDbGFzcyh0eXBlb2YoTGlzdDxpbnQ+KSk7CiAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJ7MH06IHsxfSIsIHR5cGVvZihMaXN0PGludD4pLCByZXMyKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBib29sIElzQmFzZWRPblN1cGVyQ2xhc3MoVHlwZSB0eXBlKQogICAgICAgIHsKICAgICAgICAgICAgVHlwZSB0eXBlMiA9IHR5cGU7IC8vIHR5cGUgaXMgeW91ciB0eXBlLCBsaWtlIHR5cGVvZihDbGFzc0EpCgogICAgICAgICAgICB3aGlsZSAodHlwZTIgIT0gbnVsbCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKHR5cGUyLklzR2VuZXJpY1R5cGUgJiYKICAgICAgICAgICAgICAgICAgICB0eXBlMi5HZXRHZW5lcmljVHlwZURlZmluaXRpb24oKSA9PSB0eXBlb2YoU3VwZXJDbGFzczw+KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0eXBlMiA9IHR5cGUyLkJhc2VUeXBlOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQp9