簡體   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