簡體   English   中英

在派生類中添加到虛函數

[英]Adding to virtual function in derived class

我有一個繼承自piece pawn類:piece具有一個聲明為moveTo的函數,如下所示:

public virtual void moveTo(Coord newLoc)
{
    Coord origLoc = location;
    Transform transform = gameObject.GetComponent<Transform>();
    Coord transCoord = newLoc - location;

    if (LogicMaster.currentBoard[newLoc].piece != null) { 
        if (LogicMaster.currentBoard[transCoord].piece.targeted) { 
            UnityEngine.Object.Destroy(LogicMaster.currentBoard[transCoord].actor);
            LogicMaster.currentBoard[transCoord].actor = null;
        }
    }

    if (LogicMaster.currentBoard[newLoc].actor == null)
    {
        Vector3 transVector = new Vector3();

        transVector.x = transform.position.x + transCoord.x * Constants.oneRight.x;
        transVector.z = transform.position.z + transCoord.y * Constants.oneForward.y;
        transVector.y = transform.position.y;
        transform.position =  transVector;

        LogicMaster.currentBoard[newLoc].actor = gameObject;
        LogicMaster.currentBoard[newLoc].piece = this;
        LogicMaster.currentBoard[newLoc].piece.location = newLoc;
        LogicMaster.currentBoard[this].actor = null;
        LogicMaster.currentBoard[this].piece = null;
        LogicMaster.selectedPiece = null;
        LogicMaster.pieceSelected = false;
        LogicMaster.currentBoard.resetColours();
        LogicMaster.currentBoard.hideMarkers();
        LogicMaster.whiteTurn = !LogicMaster.whiteTurn;
    }
}

是否有可能在pawn類內實現重寫,該類實現moveTo內的代碼,然后將其添加到末尾? 否則,我認為這只是復制和粘貼作業。

謝謝。

如CodeCaster所述,您可以重寫該方法並調用base.MoveTo(..),然后添加您自己的邏輯。

基類:

public class CodeFirstInstallationService : IInstallationService
{
    public virtual void InstallData(string defaultUserEmail,
        string defaultUserPassword, bool installSampleData = true)
    {
        // Doing basic logic
    }
}

從基礎派生的類:

public class MyInstallationService : CodeFirstInstallationService
{
    public override void InstallData(string defaultUserEmail,
        string defaultUserPassword, bool installSampleData = true)
    {
        // Let the base class do it´s install logic
        base.InstallData(defaultUserEmail, defaultUserPassword, installSampleData);

        // Do my own logic
        // Install flux capacitor etc
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM