サブクラスを持つクラスがあります。スーパークラスにはPosition
プロパティがあります。 Position
プロパティが変更された場合、サブクラスは追加の操作を実行する必要があるため、セッターメソッドをオーバーライドしてスーパークラスのセッターを呼び出そうとしています。
スーパークラスのセッターの呼び出し部分がダウンしていると思いますが、ここでオーバーライド構文がどのように機能するのか理解できません。
これが私の最善の試みです:
ゲッターは概念実証のためだけにあります-私もそれを上書きしたいと思いますか?
ゲッターとセッターはこの形式のエラーを私に与えます:
継承されたメンバー 'superClassName.Position。[gs] et'は、仮想、抽象、またはオーバーライドとしてマークされていないため、オーバーライドできません
以下は、適切な測定のためのエラーのスクリーンキャップです。
また、set
の前にoverrideキーワードを使用してみました。余分なゲッターを削除しても効果はありません。
正しい構文は何ですか?
オーバーライドは問題ありません。ただし、エラーメッセージが示すように、基本クラスのプロパティを仮想としてマークして、それをオーバーライドできるようにする必要があります。
public virtual Vector2 Position
Javaとは異なり、C#ではクラスメンバーはデフォルトでは仮想ではありません。基本クラスを変更できない場合は、運が悪いです。
Position
プロパティは基本クラスでは仮想ではないため、オーバーライドできません。仮想化すると、それを上書きできるようになります。
少し厄介なことですが、他のビットを使わずにオーバーライドしています。これは、私が頻繁に行うことではないので、何が起こっているのかを確認するために、いじくり回す必要がありますが、first =やるべきことは、基本クラスのプロパティを変更することです...
これは、コンパイラメッセージが正確に伝えていることでもあります。
継承されたメンバー 'superClassName.Position。[gs] et'は、仮想、抽象、またはオーバーライドとしてマークされていないため、オーバーライドできません
基本クラスのプロパティについて何かを伝えています-それをオーバーライドするために変更する必要があるのはそれです。コンパイラのメッセージが役立ちます-それらに細心の注意を払ってください!
基本クラスで:キーワードvirtual
を追加
エラーメッセージで問題が指摘されています:)
そもそも仮想(または抽象)でないメンバーをオーバーライドすることはできません。
スーパークラスでは、プロパティ定義にvirtual
が必要です。
public virtual Vector2 Position { ... }
virtual
またはabstract
としてマークされていないメンバーは上書きできません
あなたのVector2
プロパティは、スーパークラスのvirtual
です。
public virtual Vector2 Position