我有一些ViewComponents扩展单个ViewComponent类。在我的视图中,我将它循环到ViewComponents并打印它们。不幸的是,它正在拉动转换方法而不是实际的类方法。例如:
using System;
namespace test
{
class Component {
public string getType() {
return "Component";
}
}
class ButtonComponent: Component {
public string getType() {
return "Button";
}
}
public class test
{
public static void Main() {
Component[] components = new Component[1];
components [0] = new ButtonComponent();
Console.WriteLine(components[0].getType()); // prints Component
}
}
}
如何让按钮打印“按钮”而不是“组件”?
答案 0 :(得分:3)
您正在定义两个单独的实例方法Component.getType()
和ButtonComponent.getType()
。你很可能也有一个关于这个问题的编译器警告,#34;方法ButtonComponent.getType()
隐藏了基类的方法。如果是这样,请使用new
关键字。"此警告可让您了解您遇到的行为,并且还有page about it in the documentation。
您想要做的是在基类上声明virtual
方法,在子类中声明override
:
class Component {
public virtual string getType() {
return "Component";
}
}
class ButtonComponent: Component {
public override string getType() {
return "Button";
}
}
这样ButtonComponent.getType()
的实现取代基类型。
附注:通常,方法名称的公认约定是PascalCase(不是camelCase)。考虑使用大写字母G重命名方法GetType()
。
答案 1 :(得分:1)
使用虚拟和覆盖关键字:
class Component {
public virtual string getType() {
return "Component";
}
}
class ButtonComponent: Component {
public override string getType() {
return "Button";
}
}
:)