当前位置:  开发笔记 > 编程语言 > 正文

C#.NET - 如何使用typeof()来继承?

如何解决《C#.NET-如何使用typeof()来继承?》经验,为你挑选了2个好方法。

我将从代码中解释我的场景开始:

public class A { }

public class B : A { }

public class C : B { }

public class D { }

public class Test
{
    private A a = new A ( ) ;
    private B b = new B ( ) ;
    private C c = new C ( ) ;
    private D d = new D ( ) ;

    public Test ( )
    {
        // Evaluates to "false"
        if ( a.GetType == typeof(B) ) { } //TODO: Add Logic

        // Evaluates to "true"
        if ( b.GetType == typeof(B) ) { } //TODO: Add Logic

        // I WANT this to evaluate to "true"
        if ( c.GetType == typeof(B) ) { } //TODO: Add Logic

        // Evaluates to "false"
        if ( d.GetType == typeof(B) ) { } //TODO: Add Logic
    }
}

这里要注意的重要路线是:

if ( c.GetType == typeof(B) ) { }

我认为这实际上会评估为"假",因为(B)类型和(C)类型在两个方向上彼此不相等.(C是B,但B不一定是C.)

但我需要的是某种将这一点考虑在内的条件.如何判断对象是B还是从中派生的任何东西?

我不在乎它是否是来自B的DERIVED对象,只要基类B类存在.而且我无法预测派生类可能会在我的应用程序中显示出来.我只需要假设将来可能存在未知的派生类 - 因此我只能专注于确保基类是我所期望的.

我需要一个能够为我执行此检查的条件.如何实现这一目标?



1> cdm9002..:

你可以使用is:

if (c is B) // Will be true

if (d is B) // Will be false



2> Sam Harwell..:

编辑:这回答了主题标题中的问题.cdm9002对问题有更好的答案,如完整帖子中所述.

typeof(B).IsAssignableFrom(c.GetType())


这不仅是一个完全正确的答案,而且还包括当您没有任何类的实例时,但仍想确定两种类型之间是否存在继承关系的情况.
cdm9002的答案更好,因为它不使用反射.
推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有