我有以下 Control 抽象類,其中定義了一些公共變數、欄位和方法。ClickState 是一種 emum 型別。然后我派生按鈕類,因為我不需要任何額外的行為,所以我不覆寫 Update 方法,所以我使用基類。
public abstract class Control
{
private ClickState _clickState;
public Control()
{
_clickState = CliskState.Start;
}
public virtual void Update()
{
if(***some check if mouse is over the control***)
{
_clickstate = ClickState.MouseOver;
}
}
}
public class Button : Control
{
///other code
}
...
b = new Button();
每一幀:
b.Update();
現在,當我將滑鼠懸停在按鈕上時,Update 方法(稱為每一幀)中的檢查實際上有效,但不知何故 _clickState 變數不會改變。如果我在賦值后在代碼中放置一個斷點,我會看到 Control 類的 _clickState 變數發生了變化,但 Button 中的變數沒有......我很困惑,我認為 Button._clickState 應該與其“母親”類控制,因為是繼承的。某些訪問修飾符有問題嗎?感謝您的幫助。
uj5u.com熱心網友回復:
您的理解是正確的,我相信您的代碼也可以正常作業。或者你沒有展示一些可能會做一些改變的代碼。
確保您的 Button 類中沒有另一個_clickState欄位。
這是我的代碼版本:https
://dotnetfiddle.net/OKdSnj嘗試在 IF 陳述句中添加控制臺輸出以實時查看所有值 - 它可能會幫助您進行故障排除。
if(/*some check if mouse is over the control*/)
{
_clickState = ClickState.MouseOver;
// Try to add console output to see all values here
Console.WriteLine($"New state: {_clickState}");
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/459989.html
上一篇:如何在不宣告ServletContextEvent類的物件的情況下使用事件變數來呼叫方法getServletContext?
下一篇:繼承期間未決議的參考
