【发布时间】:2018-01-18 19:32:53
【问题描述】:
“我尝试使用两个类编写程序,一个称为“Door”和“AdvanceDoor”(派生类),现在 AdvanceDoor 具有函数“ChangeCode”,我尝试使用以下语法创建一个 AdvanceDoor 对象:
门广告 = new AdvanceDoor(必填参数...);而且我看不到她的方法(ChangeCode)..”
class Program
{
static void Main(string[] args)
{
Door ad = new AdvanceDoor(222, 55, "Iron", "223");
// "here im try to call ChangeCode method from ad and its not exist"
Console.ReadLine();
}
}
如果我现在写:
AdvanceDoor d = new AdvanceDoor(222, 55, "Iron", "223");
这是工作......我的问题是为什么我不能使用基类创建对象然后如果我通过“新的advanceDoor”它给我advacneDoor选项......
【问题讨论】:
-
因为变量
ad的类型为Door。而Door没有ChangeCode方法。您只能与您正在使用的类型上存在的事物进行交互。您可以将该方法添加到父类,可以为变量使用派生类型,可以将变量强制转换为派生类型等。但问题的根源是您的设计被破坏了,您需要更好了解并建模您要使用的对象。 -
编译器应该如何知道运行时
ad中存储了哪种Door?也许你会有一个NotSoAdvancedDoor,没有ChangeCode,你存储在ad中。 C# 是一种具有出色类型安全性 的语言。所以如果你说它是一个Door,它只是一个Door,而不是一个AdvancedDoor。 -
是的,但是当我声明基类然后是子类时,它应该将其识别为子类类型不是吗?
-
@ShlomiTubul:内存中的对象可能是
AdvancedDoor类型,但变量 是Door类型。它们是两种不同的东西。 -
@David 好的,谢谢!!!
标签: c# inheritance polymorphism