假设我们有一个接口(interface):
interface ICustomShape
{
}
我们有一个继承自Shape类的类,并实现了接口(interface):
public class CustomIsocelesTriangle : Shape, ICustomShape
{
}
我将如何将CustomIsocelesTriangle转换为ICustomShape对象,以在“接口(interface)级别”上使用?
ICustomShape x = (ICustomShape)canvas.Children[0]; //Gives runtime error: Unable to cast object of type 'program_4.CustomIsocelesTriangle' to type 'program_4.ICustomShape'.
最佳答案
如果您确定:
canvas.Children[0]
返回一个CustomIsocelesTriangle
。使用调试器进行验证,或将类型打印到控制台:
var shape = canvas.Children[0];
Console.WriteLine(shape.GetType());
// Should print "program_4.CustomIsocelesTriangle"
ICustomShape
(不是CustomShape
)。 CustomIsocelesTriangle
实现ICustomShape
。尝试执行以下操作进行验证(应编译):
ICustomShape shape = new CustomIsocelesTriangle(/* Fake arguments */);
然后也许:
CustomIsocelesTriangle
,但在实现ICustomShape
之后却忘记了对其进行保存和重建; ICustomShape
的接口(interface)或两个类CustomIsocelesTriangle
(可能在不同的命名空间中),并且您(或编译器)将它们混在一起。