[英]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 { ... }
您不能覆蓋未標記為virtual
或abstract
成員
將超類中的Vector2
屬性標記為virtual
。
public virtual Vector2 Position
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.