Web Log di Adrian Florea

"You know you've achieved perfection in design, not when you have nothing more to add, but when you have nothing more to take away." Antoine de Saint-Exupery
posts - 440, comments - 2715, trackbacks - 3944

My Links


Post Categories

Image Galleries

.RO Blogs

.RO People

.RO Sites





Interfaces don't inherit from anything

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);

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" :-)

Print | posted on venerdì 10 settembre 2004 14:50 | Filed Under [ Carillon .NET ]

Powered by:
Powered By Subtext Powered By ASP.NET