此问题已经在这里有了答案:
当类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
类中有很多数据(不喜欢在上面的示例中),这将是不必要的代码。
实际上,您尝试在这里将基类的实例转换为派生类的实例。
您不允许写:
A a = new A(); B b = (B)a;
何时:
public class A { } public class B : A { }
因为如果B是A的类型,则A不是B的类型。
B
是A
的specialization:B
是enlarged A
,因此B
“适合” A
。
A
是B
的generalization:A
是reduced B
,因此A
在B
中“不适合”。
要了解有关衰老的知识:年轻时,您所知不多;老时则了解更多。你老了,但是当你老了,你留在你身边。
我推荐这些教程来学习C#和OOP:
C# Tutorial Level 0C# Tutorial Level 1C# Tutorial Level 2C# Tutorial Level 3