繁体   English   中英

如何覆盖C#中属性的setter方法?

[英]How do I override the setter method of a property in C#?

我有一个带有子类的类。 超类具有Position属性。 Position属性发生变化时,子类必须执行一个额外的操作,所以我试图覆盖setter方法并调用超类的setter。

我想我已经让超类setter调用了一部分,但是我无法弄清楚覆盖语法是如何工作的。

这是我最好的尝试: 码

吸气剂只是为了证明概念 - 假设我也想覆盖它?

getter和setter给出了这种形式的错误:

不能覆盖继承的成员'superClassName.Position。[gs] et',因为它没有标记为虚拟,抽象或覆盖

这里有一个错误的屏幕提示,以便进行良好的衡量: 错误

我也尝试在set前面使用override关键字。 去除多余的吸气剂无效。

什么是正确的语法?

覆盖是好的。 但是,正如错误消息所述,您需要将基类中的属性标记为虚拟,以便能够覆盖它:

public virtual Vector2 Position

与Java不同,默认情况下,类成员在C#中不是虚拟的。 如果你不能改变基类,那你就不走运了。

您的Position属性在基类中不是虚拟的,因此您无法覆盖它。 如果将其设为虚拟,则应该能够覆盖它。

它变得有点凌乱,在没有另一个的情况下压倒一点 - 这不是我经常做的事情,所以我必须玩它以确保发生了什么,但首先要做的是更改基类属性...

这正是编译器消息告诉您的内容:

不能覆盖继承的成员'superClassName.Position。[gs] et',因为它没有标记为虚拟,抽象或覆盖

它告诉你一些关于基类属性的东西 - 所以你需要改变它以覆盖它。 编译器消息可以提供帮助 - 密切关注它们!

在您的基类中:添加关键字virtual

在错误消息中指出了问题:)

您不能首先覆盖非虚拟(或抽象)的成员。

您的超类需要在属性定义中具有virtual

public virtual Vector2 Position { ... }

您不能覆盖未标记为virtualabstract成员

将超类中的Vector2属性标记为virtual

public virtual Vector2 Position

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM