2009/02/26(木)実験 - デリゲートの渡し方

はてブ数 2009/02/26 08:37 プログラミング::C#つーさ

匿名メソッドの速度とか、どう渡すのが一番速いのかなー。
ちょっと気になったので。(1)~(4)で一番速いのはどーれだ。

class Test
{
  class A { public int a; }
  class B : A { }
  void DeA(A obj) { obj.a++; }
  void DeB(B obj) { obj.a++; }
  void DoB(Action<B> act) { act(obj); }

  DoSomething()
  {
    DoB(DeA); // (1)
    DoB(DeB); // (2)
    DoB(delegate(B obj) { obj.a++; }); // (3)
    { // (4)
      Action<A> act = delegate(A obj) { obj.a++; });
      DoB(new Action<B>(act));
    }
  }
}

それぞれ1000万回の実行時間を計った。

続きを読む

2009/02/08(日)指定した正規表現にマッチしなくなる操作をキャンセルするテキストボックス

はてブ数 2009/02/08 06:02 プログラミング::C#つーさ

追記: TextBox.Validatingでできそうです。車輪の再発明だった模様。

指定フォーマットを入力させたいとき、MaskedTextBoxは便利なんだけど、int型を受け取りたいとか、double型を受け取りたいとかそういう目的にはイマイチ使い勝手が悪いような気がしたので作ってみた。

たとえば、ユーザにdouble型を入れて欲しい場面があった。

ユーザがちゃんと入れてくれることを信じるわけにはいかないので、double.TryParseでエラー処理を書くのはもちろんなのだけど、その前の段階で少しでもエラーをサプレスできないかなと思った。

そして好奇心からごりごりとWin32で作ってみた。

デザイナで配置してRegExPatternプロパティに

^-?\\d*(\\.\\d*)?$

とか、書く。操作後マッチしなくなるような操作は受け付けない*1。Win32で作ったので、x64では動かないかもしれない。WindowsXPでは動いてるが、他のバージョンでは動かないかもしれない。そんなことをするくらいなら、素直にTryParseのエラー処理だけしておくべきなのだとも思うが。まぁ、好奇心だから。

最近、Win32のプラットフォーム呼び出しにあんまり抵抗がなくなってきた。やばいなぁ。

続きを読む