6

假设我们有一个接口:

interface ICustomShape
{
}

我们有一个继承自 Shape 类并实现接口的类:

public class CustomIsocelesTriangle : Shape, ICustomShape
{

}

我将如何将 CustomIsocelesTriangle 转换为 ICustomShape 对象,以便在“接口级别”使用?

ICustomShape x = (ICustomShape)canvas.Children[0]; //Gives runtime error: Unable to cast object of type 'program_4.CustomIsocelesTriangle' to type 'program_4.ICustomShape'.
4

1 回答 1

5

如果您确定:

  1. canvas.Children[0]返回一个CustomIsocelesTriangle
    使用调试器验证,或将类型打印到控制台:

    var shape = canvas.Children[0];
    Console.WriteLine(shape.GetType());
    // Should print "program_4.CustomIsocelesTriangle"
    
  2. 你正在投射到ICustomShape(不是CustomShape)。

  3. CustomIsocelesTriangle实现ICustomShape
    试试这个来验证(它应该编译):

    ICustomShape shape = new CustomIsocelesTriangle(/* Fake arguments */);
    

那么也许:

  • CustomIsocelesTriangle在不同的项目或程序集中,并且在实现后忘记保存和重建它ICustomShape
  • 或者,您引用了旧版本的程序集;
  • 或者,您有两个命名的接口ICustomShape或两个类CustomIsocelesTriangle(可能在不同的名称空间中),而您(或编译器)将它们混淆了。
于 2013-11-10T02:59:06.267 回答