Ieri sera, dopo il post di Corrado, ho continuato a giocare un po' con le interfacce perché è venuto anche a me il dubbio di un possibile bug di IsSubclassOf... E lo snippet sotto lo dimostra:
using System;
using System.Reflection;
interface IFoo{}
public class Foo
{
static void Main()
{
BindingFlags all = BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy;
Type ifooType = typeof(IFoo);
Type objectType = typeof(object);
Console.WriteLine("{0} is{1} subclass of {2}", ifooType.Name, ifooType.IsSubclassOf(objectType) ? "" : "'nt", objectType.Name);
Console.WriteLine("{0}\t#members = {1}", ifooType.Name, ifooType.GetMembers(all).Length);
Console.WriteLine("{0}\t#members = {1}", objectType.Name, objectType.GetMembers(all).Length);
Console.Read();
}
}
L'output è questo:
IFoo is subclass of Object
IFoo #members = 0
Object #members = 14
Però, se IFoo fosse veramente "subclass" di Object, avremmo dovuto ottenere un numero di membri per IFoo, non minore rispetto a quello per object!
La morale: "interfaces don't inherit from anything" e "It does appear that there's a bug in the BCL method IsSubclassOf" :-)