Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 与c中的以下类型转换混淆#_C#_.net_Casting - Fatal编程技术网

C# 与c中的以下类型转换混淆#

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派生的。见

//以下是正确的吗? 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
派生的。见鬼,即使是这样,你也只能从
D
B
,而不是相反


这是因为它们是完全独立的类。它们具有完全相同的属性(无)这一事实改变了一切。

因为
B
不是从
D
派生出来的


如果D定义了一个新的字段或属性,那么这个问题的关键示例将是什么。b1将没有这个实现,也没有字段值的存储。

因为
D
不是派生类。注释不影响代码;-)
就目前而言,它们没有任何关联,因此C不知道如何将a
B
转换为a
D

将其更改为派生类可能是一个好主意:

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 {
//...
}