【发布时间】:2016-12-12 06:17:01
【问题描述】:
我有一个基类:
interface IBaseClass{
int x;
int y;
baseClass someMethod();
}
还有一些派生类:
class dClass1 : IBaseClass {
int x;
int y;
baseClass someMethod();
}
class dClass2 : IBaseClass {
int x;
int y;
baseClass someMethod();
}
根据子类算法的属性值与其他子类不同 现在我想将这些子类转换为他们:
dClass1 c1=new dClass1 ();
c1.x=4;
c1.y=5;
dClass2 c2=c1;//cast to dClass2 , but value of property set by according to the own algorithm
Console.WriteLine("{0}, {1}", c1.x, c1.y);//4,5
Console.WriteLine("{0}, {1}", c2.x, c2.y);//7,1
【问题讨论】:
-
你不能那样做。您可以将 dClass1 和 dClass2 都转换为 IBaseClass,因为两者都是 IBaseClass。您不能将 dClass1 转换为 dClass2,因为 dClass1 不是 dClass2。我认为您对 C# 类的本质有一个错误的理解。
-
@EdPlunkett -- 它比“C# 类的本质”更广泛。它是面向对象编程的基本原则之一:多态性。
-
@roryap 好吧,我会在 C++98 中试一试(
((dClass2 *)& c1),而不是dynamic_cast)(并不是说它是一个好主意,只是你可能会走运并为两者获得相同的布局),并且在 JavaScript 中它会非常有意义。我不是计算机科学家,我是一个指节狂。
标签: c# oop inheritance interface polymorphism