0
Help us understand the problem. What are the problem?

posted at

updated at

インターフェースに静的メソッドを作りたくなったら

インターフェース

ガチの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)とすれば
メインのメッセージキューに積まれるようになる。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
0
Help us understand the problem. What are the problem?