CustomIsocelesTriangle

CustomIsocelesTriangle

假设我们有一个接口(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(可能在不同的命名空间中),并且您(或编译器)将它们混在一起。
  • 10-08 16:15