小屋創作

日誌2019-12-25 18:58

【筆記】建構、解構及event運用 & 一些細節

作者:樂小呈


建構、解構及event運用

>--建構、解構--<

public class ClassA
{
//建構子
    public ClassA()
    {
    }

//解構子
    ~ClassA()
    {
    }
}

{
    object obj = new object; <= 建構

} <= 解構(之後都用不到時)


>--實例,工廠與控制中心--<
public class FactoryConsole
{

    public static event Action OperationAllFactory;
    public static event Action StopAllFactory;

    Factory factory001 = new Factory();
    Factory factory002 = new Factory();
    Factory factory003 = new Factory();
    Factory factory004 = new Factory();

    public void StartAllFactory()
    {
        OperationAllFactory.Invoke();
    }
    public void StopAllFactory()
    {
        StopAllFactory.Invoke();
    }
}

public class Factory
{
    bool isOperation = true;

    public Factory()
    {
    //在建構時先把事件註冊好
    FactoryConsole.OperationAllFactory += StartOperation;
    FactoryConsole.StopAllFactory += StopOperation;
    }

    public void StartOperation()
    {
        isOperation = true;
    }
    public void StopOperation()
    {
        isOperation = false;
    }

    ~Factory()
    {
        //在解構時取消註冊所有事件(即使可能取消過了),以避免Invoke event時可能的錯誤
        FactoryConsole.OperationAllFactory -= StartOperation;
        FactoryConsole.StopAllFactory -= StopOperation;
    }
}

一些細節
GetSet可以直接添加判斷式
private object obj;
public object Obj { get => obj; set { if (value != null) obj = value; } }

transform是 { get; }
transform等同於 GetComponent<Transform>();
所以每禎調用的話會很吃效能

簡寫if(object != null) { object.Function(); }
可以簡寫成 object?.Function();

如果你無法預期一個Coroutine需要執行多久(禎),但你需要在他執行完後做某件事,你可以丟一個委派當輸入
IEnumerator WaitRandomSecond(System.Action callback)
{
    float duration = UnityEngine.Random.Range(1f, 3f);
    yield return new WaitForSeconds(duration);
    callback?.Invoke();
}

清除event
用迴圈取出已註冊的事件,一個一個取消
foreach(Delegate d in FindClicked.GetInvocationList())
{
    FindClicked -= (FindClickedHandler)d;
}
可以使用 = null 來清除,但不建議

11

6

LINE 分享

相關創作

promise.all 有一個失敗就不會往下做其他promise了,如何無痛讓promise做事 - promise.all的陷阱

《生活中的資安風險:偵防技術實戰》

【學習】插件、多人和反向工程

留言

開啟 APP

face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】