如果创建类A,并且类B继承自类A,为什么C#要求我在它们之间进行显式转换?

例如:

public class Mammal
{
}

public class Dog : Mammal
{
}


...

Mammal foo = new Dog(); // Invalid, wants an explicit cast
Mammal bar = (Mammal)new Dog(); // This one works


我很好奇这个限制背后的原因是什么。

最佳答案

不太清楚你的意思吗?您编写的两个语句都可以编译并且可以正常工作。

您是否要将此写为您的问题...?

Dog foo = new Mammal(); // Invalid, wants an explicit cast
Dog bar = (Dog)new Mammal(); // This one works


如果这是您的意思(将与注释匹配),则第一个将不会编译,因为Mammal不是Dog并且编译器知道它,因此它不会让您分配它(是Dog,因为它是从中派生的,但是反之则不成立。在第二篇文章中,您将推翻编译器的更好判断,并告诉您更好地知道Mammal确实是Mammal,但实际上并非如此,该语句在运行时会因Dog而失败。

关于c# - C#显式转换派生类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2164552/

10-11 19:40