C#.NET - 如何让 typeof() 与继承一起使用?

2023-12-27

我将首先用代码解释我的场景:

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) ) { }

我相信这实际上会评估为“false”,因为 typeof(B) 和 typeof(C) 在两个方向上都不相等。 (C 是 B,但 B 不一定是 C。)

但我需要的是某种能够考虑到这一点的条件。我如何判断一个对象是 B 还是由它派生的任何对象?

我不在乎它是否是从 B 派生的对象,只要基 B 类存在即可。我无法预测什么派生类可能会出现在我的应用程序中。我只需要假设将来可能存在未知的派生类 - 因此我只能专注于确保基类是我所期望的。

我需要一个条件来为我执行此检查。如何才能做到这一点?


你可以只使用is:

if (c is B) // Will be true

if (d is B) // Will be false
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#.NET - 如何让 typeof() 与继承一起使用? 的相关文章

随机推荐

  • macOS + Qt + Intellisense 上的 Visual Studio Code

    Visual Studio Code 出现以下错误 cannot open source file QtWidgets qtwidgetsglobal h dependency of QApplication C C 1696 我有一个 C
  • CALayer 的动画结束回调?

    我想知道 CALayer 中动画的回调在哪里 或者是否有任何东西 具体来说 对于隐式动画 例如更改框架 位置等 在 UIView 中 您可以执行以下操作 UIView beginAnimations SlideOut context nil
  • ng-bootstrap 模式不显示

    我在我的应用程序中使用 ng bootstrap 模式来显示对话框 但是当单击按钮时 什么也没有发生 模式没有显示 在调试时 它可能会发现该操作被调用 但模式未显示 这是我的 app module ts import NgModule fr
  • Vaadin Binder 中的上传组件,例如粗略编辑器

    我有一个 Crud 来自 Vaadin Pro 并且想使用 BinderCrudEditor 中的上传组件 Upload 组件不存储值 或者更确切地说 缺少 HasValue 接口 因此我无法使用 Binder 有没有什么方法可以以某种方式
  • persp() 轴标签中的下标

    我正在尝试使用以下函数绘制两个变量的函数persp R 中的函数 这是我到目前为止所拥有的 C unab lt function u1 u2 return u1 u2 x lt seq 0 1 by 0 1 y lt seq 0 1 by
  • 同时绘制 3D 平面和点

    我正在尝试使用 Matplotlib 同时绘制一个平面和 3D 中的一些点 我没有错误 只是点不会出现 我可以在不同时间绘制一些点和平面 但不能同时绘制 代码部分如下所示 import numpy as np import matplotl
  • 尝试在 Android Studio 上运行增强

    我正在尝试在 Android Studio 中设置 jdo jpa 并遵循上一个问题的答案here https stackoverflow com questions 23303893 google apps engine backend
  • 接口实现(接口隔离原则)

    我遇到一种情况 我需要调用第三方服务来获取一些信息 这些服务对于不同的客户可能会有所不同 我的界面中有一个身份验证功能 如下所示 interface IServiceProvider bool Authenticate string use
  • LinqPad 不使用 C# 语句返回结果

    已经很晚了 所以这一定是愚蠢的事情 我已将 LinqPad 连接到我的数据库 但似乎无法获得最简单查询的结果 var q from app in AppInstances select new AppId app AppId 当我运行它时
  • 在视图中获取 Laravel 5 控制器名称

    我们旧网站 CSS 的设置是为了body标签有一个控制器名称的 id 和一个动作名称的类 使用 Zend Framework 1 现在我们切换到 Laravel 5 我找到了一种通过Route类 但找不到控制器名称的方法 我在 Larave
  • 通过字符串在对象图中查找属性

    我正在尝试使用访问嵌套类结构的各个部分随意的细绳 给定以下 人为的 类 public class Person public Address PersonsAddress get set public class Adddress publ
  • SQL Server 查询超时

    访问 SQL Server 2012 数据库的第 3 方应用程序正在获取 Microsoft ODBC SQL Server Driver Query timeout expired执行大约20分钟后出现错误 这是应用程序开始接收错误后我在
  • Php 标头位置重定向不起作用

    不知道为什么这不起作用 这是代码 if isset POST cancel POST cancel cancel header Location page1 php echo POST cancel 此输出不是重定向页面 而是cancel到
  • java.lang.RuntimeException: CronExpression '4 27 11 ? 8? 2014' 无效,

    将此作为无效的 CronExpression 无法弄清楚为什么 转介http www quartz scheduler org documentation quartz 1 x tutorials crontrigger http www
  • 将类型参数约束为基类型

    我知道如何强制类型参数成为subtype另一种类型 public interface IMapping
  • Zend Zend_File_Transfer_Adapter_Http重命名问题

    我有一个关于在 Zend 中上传文件后重命名文件的问题 我不知道将重命名过滤器放在哪里 这就是我所拥有的 我尝试过移动东西 但我迷路了 目前 它确实将文件上传到我的照片文件夹 但没有重命名 谢谢你的帮助 if this gt request
  • iOS 上 UIVIew 和 CALayer 关于背景图片的关系

    试图理解UIView和CALayer之间的关系 我阅读了Apple文档 但它没有详细描述两者之间的关系 为什么当我添加背景图像来查看 自定义 ViewController view 时 我会得到不需要的图像黑色 当我将背景图像添加到 cus
  • TypeScript:抑制类型上不存在属性

    我在使用 TypeScript 时遇到了以下问题 有一个模块 它使用一个函数myApp common anotherFunc 来自 旧 js 代码 module myApp export module helpers export clas
  • AngularJS:隐藏 ng-message 直到点击表单提交按钮

    这是 AngularJS 1 x 中使用 ng messages 的典型示例
  • C#.NET - 如何让 typeof() 与继承一起使用?

    我将首先用代码解释我的场景 public class A public class B A public class C B public class D public class Test private A a new A privat