public bool IsAssignableFrom(Type type)
{
if (this.Equals(type))
{
return true;
}
else if (type == null)
{
return false;
}
else if (this.IsArray && type.IsArray)
{
if (this.GetArrayRank() != type.GetArrayRank())
{
return false;
}
else if (this.__IsVector && !type.__IsVector)
{
return false;
}
Type e1 = this.GetElementType();
Type e2 = type.GetElementType();
return e1.IsValueType == e2.IsValueType && e1.IsAssignableFrom(e2);
}
else if (this.IsSealed)
{
return false;
}
else if (this.IsInterface)
{
return Array.IndexOf(type.GetInterfaces(), this) != -1;
}
else if (type.IsInterface)
{
return this == this.Module.universe.System_Object;
}
else if (type.IsPointer)
{
return this == this.Module.universe.System_Object || this == this.Module.universe.System_ValueType;
}
else
{
return type.IsSubclassOf(this);
}
}