–建構、解構–<
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
簡寫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 來清除,但不建議