C#类型比较

时间:2010-06-14 14:15:02

标签: c# reflection types

这让我筋疲力尽,有以下任何理由:

public abstract class aExtension
{
    public abstract bool LoadExtension(Constants c); // method required in inherit
    public abstract string AppliesToModule // property required in inherit
    {
        get;
    }
    public abstract string ExtensionName // property required in inherit
    {
        get;
    }
    public abstract string ExtensionDescription // property required in inherit
    {
        get;
    }
}

public class UK : aExtension
{
    public override bool LoadExtension(Constants c)
    {
        return true;
    }
    public override string AppliesToModule
    {
        get { return "string"; }
    }
    public override string ExtensionName
    {
        get { return "string"; }
    }
    public override string ExtensionDescription
    {
        get { return "string"; }
    }
}
对于以下表达式,

将返回false:

                bool a = t.IsAssignableFrom(aExtension));
                bool b = t.BaseType.IsAssignableFrom(aExtension));
                bool c = typeof(aExtension).IsAssignableFrom(t);
                bool d = typeof(aExtension).IsAssignableFrom(t.BaseType);
                bool e = typeof(aExtension).IsSubclassOf(t);
                bool f = typeof(aExtension).IsSubclassOf(t.BaseType);
                bool g = t.IsSubclassOf(typeof(aExtension));
                bool h = t.BaseType.IsSubclassOf(typeof(LBT.AdMeter.aExtension));
                bool i = t.BaseType.Equals(typeof(aExtension));
                bool j = typeof(aExtension).Equals(t.BaseType);

T是来自calss UK的反映类型。

Stange的事情是我在同一个应用程序中的外部程序集上执行完全相同的操作并且它按预期工作...

2 个答案:

答案 0 :(得分:1)

UK可能会从程序集的不同版本继承aExtension

答案 1 :(得分:0)

你有同一个装配的副本吗?如果从不同位置加载相同的程序集,则类型不兼容。

您是否仅通过反射在某处加载装配?我想我遇到了这个问题。