为什么我不能将基类的实例转换为派生类型? [复制]

问题描述 投票:-2回答:1

当类A派生自C#中的类B时,我想将类B转换为类A,但是当我强制转换时,它抛出了一个

System.InvalidCastException

这里是代码:

public static void Main()
{
    A a = new A();
    B b = (B)a;
}
public class A { }
public class B : A { }

我可以在B类中执行一些将A对象转换为B对象的方法,但是我不想这样做,因为我在A类中有很多数据(不喜欢在上面的示例中),这将是不必要的代码。

c# inheritance types strong-typing
1个回答
1
投票

实际上,您尝试在这里将基类的实例转换为派生类的实例。

您不允许写:

A a = new A();

B b = (B)a;

何时:

public class A { }

public class B : A { }

因为如果B是A的类型,则A不是B的类型。

BAspecializationBenlarged A,因此B“适合” A

ABgeneralizationAreduced B,因此AB中“不适合”。

要了解有关衰老的知识:年轻时,您所知不多;老时则了解更多。你老了,但是当你老了,你留在你身边。

我推荐这些教程来学习C#和OOP:

C# Tutorial Level 0C# Tutorial Level 1C# Tutorial Level 2C# Tutorial Level 3

C# Snippets @ Techi.io

Beginning Visual C# 2008 Programming

UML Tutotrial

© www.soinside.com 2019 - 2024. All rights reserved.