インターフェース
ガチのinterfaceだと無理なのでclassをインターフェースとして作成する
public class ISomething {
protected delegate void StaticFuncDelegate(string arg);
protected static StaticFuncDelegate func;
public static void StaticFunc(string arg) {
func?.Invoke(arg);
}
}
インターフェースを実装する
public class SomethingImpl : ISomething {
public SomethingImpl {
Initialize();
}
public void Initialize() {
func = StaticFuncImpl;
}
private static void StaticFuncImpl(string arg) {
System.Diagnostics.Debug.WriteLine("called.");
}
}
使う人
public class Caller{
public void CallFunc() {
ISomething.StaticFunc("なんか");
}
}
何がやりたかったのか
各部品からメインループにメッセージをポストしたい。が
メインループと部品は切り離したかった。
部品側でインスタンス持ち回りはしたくない。
メッセージキューの実体はメインループ実装先に置きたい。
SendMessage(msg)
の実装をメインループ実装先に置いて
部品からSendMessage(msg)とすれば
メインのメッセージキューに積まれるようになる。