Ank*_*nko 25 c# overriding get properties set
我有一个带有子类的类.超类有一个Position属性.当Position属性发生更改时,子类必须执行附加操作,因此我尝试覆盖setter方法并调用超类的setter.
我想我已经让超类setter调用了一部分,但是我无法弄清楚覆盖语法是如何工作的.
这是我最好的尝试:

吸气剂只是为了证明概念 - 假设我也想覆盖它?
getter和setter给出了这种形式的错误:
不能覆盖继承的成员'superClassName.Position.[gs] et',因为它没有标记为虚拟,抽象或覆盖
这里有一个错误的屏幕提示,以便进行良好的衡量:

我也试过在前面使用override关键字set.去除多余的吸气剂无效.
什么是正确的语法?
dtb*_*dtb 39
覆盖是好的.但是,正如错误消息所述,您需要将基类中的属性标记为虚拟,以便能够覆盖它:
public virtual Vector2 Position
Run Code Online (Sandbox Code Playgroud)
与Java不同,默认情况下,类成员在C#中不是虚拟的.如果你不能改变基类,那你就不走运了.
您的Position属性在基类中不是虚拟的,因此您无法覆盖它.如果将其设为虚拟,则应该能够覆盖它.
它变得有点凌乱,在没有另一个的情况下压倒一点 - 这不是我经常做的那种事情,所以我必须玩它以确保发生了什么,但首先要做的是更改基类属性...
这正是编译器消息告诉您的内容:
不能覆盖继承的成员'superClassName.Position.[gs] et',因为它没有标记为虚拟,抽象或覆盖
它告诉你一些关于基类属性的东西 - 所以你需要改变它以覆盖它.编译器消息可以提供帮助 - 密切关注它们!
在错误消息中指出了问题:)
您不能首先覆盖非虚拟(或抽象)的成员.
你的超类需要virtual在属性定义中:
public virtual Vector2 Position { ... }
Run Code Online (Sandbox Code Playgroud)