Animal thisIACat=new Cats();-这是隐式转换吗
本文关键字:转换 thisIACat new Cats Animal | 更新日期: 2023-09-27 18:00:20
给定此示例:
Animal thisIsACat = new Cat();
是否存在从Cat
到Animal
的隐式转换?
澄清:
假设:
class Animal
{
}
class Cat: Animal
{
}
这只是亚型多态性。
请注意,这是一种隐式转换(规范在§6.1.6中对其进行了定义),但它不会改变被转换对象的引用标识。
没有转换-您的对象是Cat
,并且将始终是Cat
-只有变量列为Animal
,而不是对象本身。
一个转换是,你取一个Cat
对象,对它做一些事情,然后突然有了一个不同类型的Animal
对象。在这种情况下真的没有意义。
在处理结构时,转换更有意义。Integer
5可以转换为Decimal
5m,它们是两个完全不同的对象。
代码:
int i = 5;
decimal d = i;
这将是一个隐式转换,因为5是System.Int32
,但它被转换为5m,这是一个System.Decimal
,是一个与原始对象完全不同的对象。
我必须假设Animal
是一个接口(或抽象类)。数据类型Cat必须实现Animal接口。。。是的,你有一个从new Cat()
到Animal的隐含转换。从动物到猫的转换必须明确:例如(Cat)thisIsACat
继续阅读关于子类型多态性的资源,你会发现:起源编程语言中的子类型概念可以追溯到20世纪60年代;它是在Simula导数中引入的。1980年,John C.Reynolds和Luca Cardelli(1985)首次对亚型进行了形式化处理,他们使用范畴理论对隐式转换进行了形式。
具体来说,在这种情况下,我们有两种类型:动物和猫。Cat是Animal的一个子类型:类型转换、类型转换和强制指的是将一种数据类型的实体隐式或显式更改为另一种的不同方式