Kev*_*ity 1 c# inheritance casting class
如果我创建了A类,而B类继承自A类,为什么C#要求我在它们之间显式地转换?
例如:
public class Mammal
{
}
public class Dog : Mammal
{
}
Run Code Online (Sandbox Code Playgroud)
...
Mammal foo = new Dog(); // Invalid, wants an explicit cast
Mammal bar = (Mammal)new Dog(); // This one works
Run Code Online (Sandbox Code Playgroud)
我只是好奇这个限制背后的原因是什么.
不太清楚你的意思?你编写的这两个语句都编译好并且工作正常.
你的意思是把它写成你的问题......?
Dog foo = new Mammal(); // Invalid, wants an explicit cast
Dog bar = (Dog)new Mammal(); // This one works
Run Code Online (Sandbox Code Playgroud)
如果那就是你的意思(它会与注释相匹配)那么第一个就不会编译因为a Mammal不是a Dog并且编译器知道它,所以它不会让你分配它(a Dog是Mammal因为它是从它派生的,但反过来并不成立).在第二个中,你将覆盖编译器更好的判断,告诉它你更清楚一个Mammal真正的a Dog,但事实并非如此,这个语句在运行时会失败InvalidCastException.
| 归档时间: |
|
| 查看次数: |
1586 次 |
| 最近记录: |