首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么IsAssignableFrom和GetInterface会给出不同的结果

首先,需要了解两个基本概念:

  1. 接口(Interface):在面向对象编程(OOP)中,接口是一种定义对象属性和行为的规范。它定义了一个类或对象应该具备的公共方法,以便于其他类或对象能够实现这些方法。
  2. 继承(Inheritance):在面向对象编程中,继承是一种建立类或对象之间关系的方式。当一个类(子类)从另一个类(父类)那里继承属性和方法时,子类可以重写或扩展父类的方法,从而实现代码的复用和扩展。

现在,假设我们有一个名为Animal的基类,具有Sound()方法,并定义了一个名为Dog的子类和一个名为Cat的子类。

代码语言:csharp
复制
public class Animal
{
    public virtual void Sound()
    {
        Console.WriteLine("The animal makes a sound");
    }
}

public class Dog : Animal
{
    public override void Sound()
    {
        Console.WriteLine("The dog barks");
    }
}

public class Cat : Animal
{
    public override void Sound()
    {
        Console.WriteLine("The cat meows");
    }
}

现在,我们有两个类DogCat,它们都继承自Animal基类,并重写了Sound()方法。根据定义,DogCat都实现了Animal接口。

接下来,我们使用IsAssignableFromGetInterface方法进行测试:

代码语言:csharp
复制
Animal animal = new Dog();
Animal animal2 = new Cat();

Console.WriteLine("Is Dog a Dog? " + animal.GetType().IsAssignableFrom(animal.GetType()));
Console.WriteLine("Is Cat a Dog? " + animal2.GetType().IsAssignableFrom(animal2.GetType()));

Console.WriteLine("Does Dog implement Animal? " + animal.GetType().GetInterface(typeof(Animal).FullName));
Console.WriteLine("Does Cat implement Animal? " + animal2.GetType().GetInterface(typeof(Animal).FullName));

输出结果为:

代码语言:txt
复制
Is Dog a Dog? True
Is Cat a Dog? False
Does Dog implement Animal? True
Does Cat implement Animal? False

从输出结果可以看出:

  • animalanimal2都是Animal类型的实例,因为它们都实现了Animal接口。
  • Dog类实现了Animal接口,所以animalDog类的实例。
  • Cat类没有实现Animal接口,所以animal2不是Cat类的实例。
  • 虽然animalanimal2都是Animal类型的实例,但是它们分别属于不同的类(DogCat)。

因此,IsAssignableFromGetInterface方法在判断类或对象是否实现了某个接口时,会给出不同的结果。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么PERMANOVAANOSIM结果不同

PERMANOVA(即adonis)ANOSIM本身分析东西不一样,得到结果不同也很正常。 如果考察因子影响很强,通常会得到相似的结果。如果因子影响很弱,那么结果可能产生差别。...因此,结果不同可能表明因素影响可能不是真的,或者效应很弱。 另外还需要查看对应方法统计量,即PERMANOVAF值ANOSIMR值。...可增加置换检验次数查看对结果影响,通常显著P值随着检验数量增加而减少。 个人主观经验,F值为10都是比较低。强F值可以达到20,50甚至100。...如果PCoA结果分得很开,一般PERMANOVA也能检验出来。 如果多因子间存在交互效应,结果不同。PERMANOVA可直接处理交互效应,而ANOSIM不能。...最后,样本类型,重复个数也造成影响。

3K41

概率统计——为什么条件概率结果总和直觉不同

已知其中一个是女孩,那么另一个孩子也是女孩概率是多少呢? 这是一道概率论课本上经典问题,一开始时候,很多人觉得两个孩子性别是独立事件,我们知道其中一个孩子性别,应该对另一个孩子没有影响。...所以另一个孩子也是女孩概率是1/3。 这个答案计算过程没什么问题,我想大家应该都能看明白,但是不知道会有多少人觉得奇怪。为什么答案不是 1/2 呢?难道两个孩子性别不是独立吗?...我们之前一通分析,用上各种公式进行计算,得到结果明明是1/3,为什么这里就变成 1/2 了呢?这两道题难道不是一样吗?...这样理解都行得通,但还是没有解决我们之前疑惑,为什么看起来完全一样两件事,得到结果不同呢?就因为我们看到了其中一个孩子吗?可是我们看到孩子,与孩子性别的概率应该无关才对。...我们看孩子之前,两个孩子是一体,我们看了一眼之后,这两个孩子就区分开来了。我们看之前,这是两个孩子,看了之后,就成了我们看过孩子没看过孩子。从物理学上来看,这两者熵是不同

1.2K20

winlinuxphp异或运算结果不同

winlinuxphp异或运算结果不同 作者:matrix 被围观: 3,383 次 发布时间:2015-06-17 分类:兼容并蓄 零零星星 | 3 条评论 » 这是一个创建于 2633...一个获取key函数(模拟jsphp代码)在本地测试成功,而在服务器上失败。 逐行die()之后发现问题在于b ^=4294967295;之前获取b都没问题,可到了这里就结果完全不一样。 真是狗日xor仙人板板。为什么换成xor结果^又不同。 难道xor不是异或。。。 Q1:幸好我不是第一个发现。...php开启了GMP:gmp_xor()进行xor运算 Q2:无解 将^ 换成xor运算winlinux结果都一样。...但是为毛线它又和^结果不同。。。 应该也是整数溢出吧。。。

2.6K10

Spring Mybatis 使用不同数据源怎样?

本篇文章要讨论一个问题点, 给SpringMybatis设置不同数据库数据源怎样? 注意. 正常情况下一定要给SpringMybatis设置相同数据库数据源....Spring会将Service代理对象放入容器中, 当调用代理对象方法时, 首先会调用到事务拦截器TransactionInterceptor中,这个事务拦截器拿到容器中事务管理器, 事务管理器根据设置数据源...如上图, 由于文章开头, 在配置事务管理器SqlSessionFactory时,分别设置了不同数据源, 最终就导致, 事务管理器开启事务时候, 使用数据源A创建一个数据库连接....而Mybatis在进行实际操作数据库时候, 使用数据源B创建一个数据库连接. 造成了开启事务进行实际数据库操作连接不是同一个连接....因此,在配置时候,需要将SqlSessionFactory事务管理器设置成相同数据源.

52810

Python爬取同样网页,bs4xpath抓到结果不同

就是我爬取同样网页,用xpath时候会将图上这样script标签里面的内容当成text取出来,但是用BS4就不会。导致两种方法取出来text不一样。这种情况应该如何处理?...我可能想问是: 1.存在这种差异是对吗?确认不是我代码写错了? 2.纯技术上,如果Xpath结果想去掉这段,bs4结果想有这段应该如何处理?...刚入手的话不用纠结哪个更好,先练一个,再练习另一个。其实爬虫中能让你上bs或xp还算是比较简单静态页面。 bs,xpath二者选一个用熟,另一个就行。...这篇文章主要盘点了一个Python正则表达式问题,文中针对该问题,给出了具体解析代码实现,帮助粉丝顺利解决了问题。...最后感谢粉丝【沐子山树】提出问题,感谢【Kimi】、【瑜亮老师】给出思路,感谢【莫生气】等人参与学习交流。

7110

你有没有想过为什么交易退款要拆开不同表?

前言 " 近期做新项目,在设计表结构时候,突然想起来之前面试时候遇到一个问题,那时候也是初出茅庐,对很多东西一知半解(当然现在也是),当时那个小哥哥问我为什么交易退款要拆成两个表?...但是恰好那次那个小哥哥就问了这个问题,支付退款为什么要分开记录? 当时也是确实是实力不允许,我只是说了就是这么用,把正向流程逆向流程拆开,分开实现逻辑,比较方便。...字段设计 交易退款是完全不同两种业务,不像账户流水就是资金记录。 交易除了订单状态还有一些交易信息比如商户号、优惠金额、实付金额、交易渠道、商品 id 名称、备注等各种信息。...开发效率 交易退款分开之后,两个人负责不同业务进行开发,包括业务逻辑查询展示。如果放在一起,就很多字段不能保证别人知道有还是没有,是存储还是不存储,毕竟表里设置都可以为空。...A: 在很多 APP 中大家看到多种订单都是在一个列表里面展示出来,比如:支付宝账单页面。 当然,如果前端分 tab 页,分开展示不同业务,那对后端来说简直不要太友好。

1.1K20

sshsftp为什么是同一端口_sshsftp使用不同端口

大家好,又见面了,我是你们朋友全栈君。 8种机械键盘轴体对比 本人程序员,要买一个写代码键盘,请问红轴茶轴怎么选?...1.1 描述 SFTP(SSH File Transfer Protocol)即安全文件传送协议),是一数据流连接,提供文件访问、传输管理功能网络传输协议。...sftp是基于ssh上实现,所以严格来说我们是无法来关闭ssh,而只是使用sftp。 ssh默认使用是22端口,当然这个端口是可以修改。...,限制他们操作,这个可以利用RsshScponly或者实现。...但是如果提过sftp服务需要给另外一个局域网用户使用,这样我们虽然对这些用户做了限制,我们ssh服务还是开着,这样他人还是可以猜我们服务器用户名密码,通过ssh登录上来,最好方法是我们暴露出去服务根本无法通过

3.1K40

PostgreSQL 同一种SQL为什么这样写提升45%性能 --程序员DBA思维方式不同决定

同时最后我们演示一下复杂SQL 程序员 DBA 在专项思维模式不同导致运行效率不同案例。...下面的是利用这个函数来对数学成绩进行排序,然后取其中排名等于1 2进行展示。...,但是下面的语句明显从执行时间,计划产生都要好过上面开发人员撰写语句。...通过上面的语句来进行演示,明显DBA撰写方式从语句理解执行效率都高于开发人员撰写语句,那么为什么开发人员一般撰写语句都撰写成第二种方式,主要还是由于思维方式,对象,方法,类思维方式导致程序员写不出高效率...这里没有贬低程序员意思,只是职业不同思维角度不同导致差异。

6410

du df 统计结果为什么不一样

作者 | 骏马金龙 来源 | https://www.cnblogs.com/f-ck-need-u/p/8659301.html 今天有个人问我dudf统计结果为什么不同。...我们常常使用dudf来获取目录或文件系统已占用空间情况。但它们统计结果是不一致,大多数时候,它们结果相差不会很大,但有时候它们统计结果相差非常大。...例如"du -sh /"时候,统计所有分区文件,包括挂载上来。正如本文开头统计"/"一样,du结果是244G,明显比df统计结果大,就是因为将某个分区挂载到了/mnt目录下。...img文件就是在不同分区内。...4.df统计已删除但却仍有进程引用文件。 正常情况下,删除文件立刻释放相关指针,并将imapbmap中相关位图标记为未使用。

55510

面试官问我,使用Dubbo有没有遇到一些坑?我笑了。

果然如该同事所言.为什么这样呢?之前没看过肥朝Dubbo源码解析系列同学这种时候往往采用最低效解决办法,把异常栈往微信群一丢,各种求助.但是往往毫无收获,然后感叹社会为何如此冷漠!...catch不到,因为他包装成RuntimeException了 Dubbo为什么这么设计 也许你看到这里觉得这个判断好坑.Dubbo为什么要这么设计?...我们看源码,最重要是知道作者为什么这么设计,只有知道为什么这么设计才是经过了深度思考,否则看时高潮,看后就忘.讲清楚为什么这么设计,也是大家关注肥朝公众号一个重要原因.....我们来看下他判断 1.checked异常RuntimeException是不同类型,强行包装可能会出现类型转换错误,因此不包,直接抛出 2.方法签名上有声明.方法签名上有声明,如果这个异常是provider.jar...,所以异常到达consumer时,根本无法反序列化.但是包装成了RuntimeException异常则不同,此时异常就是JDK中类了,到哪都能序列化.

82540

事件总线知多少(1)

事件总线是对发布-订阅模式一种实现。它是一种集中式事件处理机制,允许不同组件之间进行彼此通信而又不需要相互依赖,达到一种解耦目的。 我们来看看事件总线处理流程: ?...2.1.事件本质 我们先来探讨一下事件概念。都是读过书,应该都还记得记叙文六要素:时间、地点、人物、事件(起因、经过、结果)。 我们拿注册案例,来解释一下。...,为什么先定义了一个空接口?...自然是针对不同事件源IEventData实现不同IEventHandler。...最后,以上事件总线实现只是一个雏形,还有很多潜在问题。有兴趣不妨思考完善一下,我也继续更新完善,尽情期待!

1.5K81

面试官问我,使用Dubbo有没有遇到一些坑?我笑了。

根据面试经验而言,能在简历上写上原理、源码等关键词,是非常具备核心竞争力.上周粉丝交流面试情况如下 ? 面试时候,把源码一波分析,令面试官虎躯一震!...果然如该同事所言.为什么这样呢?之前没看过肥朝Dubbo源码解析系列同学这种时候往往采用最低效解决办法,把异常栈往微信群一丢,各种求助.但是往往毫无收获,然后感叹社会为何如此冷漠!...RuntimeException异常抛出(重要) 这也就是为什么我们catchHelloException是catch不到,因为他包装成RuntimeException了 Dubbo为什么这么设计 也许你看到这里觉得这个判断好坑...我们看源码,最重要是知道作者为什么这么设计,只有知道为什么这么设计才是经过了深度思考,否则看时高潮,看后就忘.讲清楚为什么这么设计,也是大家关注肥朝公众号一个重要原因....结果他却说 "你笑起来更帅"!

1.2K10

MySQL索引为什么用B+Tree?InnoDB数据存储文件MyISAM有何不同

怎么还出来了,存储文件不同?哪怕考察个MVCC机制也行啊。所以这次我就好好总结总结这部分知识点。...MySQL索引为什么使用B+Tree 上面我们也说了,索引数据一般是存储在磁盘中,但是计算数据都是要在内存中进行,如果索引文件很大的话,并不能一次都加载进内存,所以在使用索引进行数据查找时候是进行多次磁盘...IO,将索引数据分批加载到内存中,因此一个好索引数据结构,在得到正确结果前提下,一定是磁盘IO次数最少。...平衡二叉树 那么既然二叉树,在特殊情况下退化成链表,那么平衡二叉树为什么不可以呢?...经过以上几点分析,MySQL最终选择了B+Tree作为了它索引数据结构。 InnDB数据存储文件MyISAM有何不同

1.6K30

MySQL 不同存储引擎下 count(星) count(1) count(field) 结果性能上差异,不要再听网上乱说了

、count(field) 为上层标准结果不同存储引擎底层实现方式可以不相同,但是结果是一样,因此主要比较三种查询方式查询结果。...(2)...count(n)count(*) count(1)、count(2)...count(n) 语义上略有区别,但它们执行结果集一致。...总结上文中讨论了一些 count 函数一些表现,并没有涉及 where 条件使用,因为一旦引入 where 条件就会引入多个字段多个字段索引进行成本分析:上面的规则虽然看着很多,但实际上结合结果...我对技术热情是我不断学习分享动力。我博客是一个关于Java生态系统、后端开发最新技术趋势地方。...作为一个 Java 后端技术爱好者,我不仅热衷于探索语言新特性技术深度,还热衷于分享我见解最佳实践。我相信知识分享社区合作可以帮助我们共同成长。

27020

抖音二面:为什么模块循环依赖不会死循环?CommonJSES Module处理有什么不同

CommonJSmodule.exportsexports有什么不同? 引入模块时路径解析规则是什么。 JavaScript模块化 首先说说为什么会有两种模块化规范。...这种全局引入方式导致两个问题,变量污染依赖混乱。...其实模块化规范远不止这两种,JavaScript官方迟迟没有给出解法,所以社区实现了很多不同模块化规范,按照出现时间前后有CommonJS、AMD、CMD、UMD。...循环引入 CommonJS一样,发生循环引用时并不会导致死循环,但两者处理方式大有不同。...结语 回到开头三个问题,答案在文中不难找到: CommonJSES Module都对循环引入做了处理,不会进入死循环,但方式不同: CommonJS借助模块缓存,遇到require函数先检查是否有缓存

1.5K10

事件总线知多少(2)

Alpha版本,这篇文章也得到了大家肯定积极反馈建议,在此谢谢大家。...本着继续学习回馈大家思想,我决定继续完善。本文将继续延续上一篇循序渐进写作风格,来完成对事件总线分析优化。 ?...但如果在实际项目中,使用反射却不是一个很明智行为,因为其性能问题。尤其是事件总线要集中处理整个应用程序所有事件,更易导致程序性能瓶颈。 既然说到了反射性能,那就顺便解释下为什么反射性能差?...初始化完容器,我们需要在手动注册取消注册事件API上分别完成依赖注册取消注册。...5.1.支持Action事件处理器 如果每一个事件处理都要定义一个类去实现IEventHandler接口,很显然造成类急剧膨胀。且在一些简单场景,定义一个类又大才小用。

1.1K70
领券