C# 与c中的以下类型转换混淆#
//以下是正确的吗? B b1=d1 那么,为什么以下工作会起作用:C# 与c中的以下类型转换混淆#,c#,.net,casting,C#,.net,Casting,//以下是正确的吗? B b1=d1 那么,为什么以下工作会起作用: class B{ // Base class } class D : B{ //Derived class from B } //create objects B b1 = new B(); D d1 = new D(); //why the following is not right? D d2 = (D) b1; 此外,如果我们不能将基类对象强制转换为派生类对象,强制转换的概念还有什么用?因为D不是从B派生的。见
class B{
// Base class
}
class D : B{
//Derived class from B
}
//create objects
B b1 = new B();
D d1 = new D();
//why the following is not right?
D d2 = (D) b1;
此外,如果我们不能将基类对象强制转换为派生类对象,强制转换的概念还有什么用?因为
D
不是从B
派生的。见鬼,即使是这样,你也只能从D
到B
,而不是相反
这是因为它们是完全独立的类。它们具有完全相同的属性(无)这一事实改变了一切。因为
B
不是从D
派生出来的
如果D定义了一个新的字段或属性,那么这个问题的关键示例将是什么。b1将没有这个实现,也没有字段值的存储。因为
D
不是派生类。注释不影响代码;-)
就目前而言,它们没有任何关联,因此C不知道如何将a
B
转换为aD
将其更改为派生类可能是一个好主意:
class Test
{
static void Main()
{
double x = 1234.7;
int a;
a = (int)x; // cast double to int
System.Console.WriteLine(a);
}
}
您仍然无法将基类强制转换为更具体的类。因为
B
不是D
。。。下一个问题D源于B,所以D也是B。而不是相反。另外,您的示例没有显示从任何东西派生的D
。您的代码没有显示从B派生的D。啊哈哈。。。现在情况不同了。这称为显式转换()。你也可以在你自己的类上实现它()谢谢你的回答。谢谢你,我实际上感到困惑:如果“int”可以被转换成biggies,那么它本身就像“double”,那么为什么在上面提到的情况下不可能呢,反正现在得到了区别,明白显式和隐式强制转换的实际含义我实际上感到困惑,因为:如果“int”可以被强制转换为biggies,那么它本身就像“double”,那么为什么在上述情况下不可能呢,反正现在已经明白了显式和隐式强制转换的实际含义
class D : B {
//...
}