2003-01-01から1年間の記事一覧

インデント

みなさんは、ソースコードのインデント幅はいくつですか? タブですか? スペースですか? 私は、昔は MULE (Emacs) の c-mode を利用していたので、「インデント幅2、タブ幅4、インデントはタブとスペースが交互に入る」という形式でした。 ところが、仕…

MessageHanbdlerAttribute への変更

ハンドラの検索部分を拡張し、MessageHandlerCacheAttribute に対応しなくてはなりません。 public static bool InvokeOne(Type t, object obj, ref Message msg) { Debug.Assert(t.IsInstanceOfType(obj)); MessageHandlerCacheAttribute cache = (MessageH…

MessageHandlerCacheAttribute

というわけで、一番簡単そうな呼び出しの高速化をはかるため、メッセージハンドラの検索をキャッシュするアトリビュートを作成してみます。 [AttributeUsage(AttributeTargets.Class|AttributeTargets.Struct, Inherited = false, AllowMultiple = false)] p…

Attributeは自分が適用された先を知っているのか?

これは、上記の問題のすべてを解決するのに便利な情報なのですが、System.Attribute クラスにはそれらしいメンバーが定義されていません。 System.AttributeUsageAttribute は System.Attribute の派生クラスにたいしてしか指定できないので、そういう機能が…

呼び出し毎のメソッド検索が低速(たぶん)

毎回すべてのメソッドを検索するのは遅いでしょう。事前にメッセージIDをキーにしたハッシュテーブルなどにメソッドを保持しておくのがよいでしょうね。 メッセージとメソッドの関係はクラスが定義された時点で決定されるので、C++ならテンプレートを使って…

実は Message パラメータが参照渡しになっていない

これも Delegate の Invoke をみると、Message& となっていましたので、unsafe で &msg を渡すようにするんでしょうか?

どんなシグネチャのメソッドでも指定できる

delegate みたいなことすりゃいいんでしょうけど、型は native int だし、よくわからないのです。次の勉強のテーマとしてはよさそうですが。

MessageHandlerAttribute の既知の問題

どんなシグネチャのメソッドにも指定できる 実は Message パラメータが参照渡しになっていない 呼び出し毎のメソッド検索が低速(たぶん) 前途多難です。

MessageHandlerAttribute の作成

これは簡単に Attribute 化できそうです。 [AttributeUseage(AttributeTargets.Method)] public class MessageHandlerAttribute : Attribute { public int id; public MessageHandlerAttribute(int msgId) { id = msgId; } } 完成……、というのはあまりにもな…

message 指令

まあ、なんじゃそりゃって人がいるだろうから軽く書いておくと、 type TClassA = class private procedure Handler1(var msg: TMsg); message WM_FOO; procedure Handler2(var msg: TMsg); message 10; end; のような感じで、メソッドにたいして Windows Mes…

Attribute 再び

昨日の話題を隣の席の方と話したところ、Delphi の message 指令も良いよね、という話があがりました。

Attribute でがんばってみる?

さて、C# でも*1(利用者に)楽ができるようにしたいものです。目標とすることは色々とありますが、特定のクラスに別のクラスの実装を付与する必要があります。このようなことをアグリゲートとか Mix-in とかアスペクト思考的などと呼ぶようですが、C# では …

Delphi における委任

まだ、.NET 対応の Delphi は preview 段階ですが、Delphi でサポートされ、C# でサポートされていないいくつかの要素は適切に IL にコンパイルされることを期待しています。 そのような機能の1つは集合型であったり、message 指令だったりインターフェスの…

has-a による委任

典型的な実装として、has-a の関係にすることが考えられます。 public class Concrete1 : IFoo { public Concrete11() { impl_foo = new FooImplement(this); } #region IFoo interface implementation public int foo { // FooImplement クラスへ委任します…

委任によるインターフェスの実装

いきなり重めの話題ですが、あまりないことではあるものの、それなりの需要として interface の実装を委任したい場合があります。この実装に関しては C++ であれば多重継承なんかを用いるところなのですが、C# では多重継承はできませんので、別の手法を考え…

さっぱりC#

最近はとっても C# な日々です。

5〜10cm

火曜日に出発するとき、山や田畑は白くなっていたのですが、戻ってくるときっちり積もっていました。帰ったら書こうと思ったことがいくつかあったはずなのですが、メモらなかったので忘れてしまいました(苦笑)

出張のため

自宅以外からの更新手段がないため、今週の日記は本日で終了です。

Got? Lost?

VB

VBがおかしいのか、使用している他人の作った関数の仕様なのか、どうも各コントロールの GotFocus, LostFocus, Validate の動きが予測と違ってこまります。 たとえば、テキストボックスで ENTER キーを押さないでフォーカスを移動した場合、内容を編集前のも…

5〜10mm

ここのところ、何日か固体や固体と液体の混ざったのが降ってはいましたが、地面に落ちたら雨と一緒な状態でした。しかし、ついに今日は5〜10mmの積雪を……いや、混ざったヤツですが……観測しました。 ワイパーをインターバルにして動かしていると、みるみる車…

面接

開発者を面接するのに、 オブジェクト指向は大丈夫? はい、十分理解していると思います。 C++は使える? はい、使えます。 C++を業務に使った開発経験は何年くらい? 3年半程度です。 こんな会話上のやり取りだけで採用の可否が決定するこの頃ですが、いい…

カレンダー2

幅を 150px 未満で済むように修正し、サイドバーの幅を 150px に増量。ちょっと不安だけどこれでいいかな。

依存関係

VB

VB では、格モジュールに依存関係を設定するためのコーディングは存在しないのでしょうか?つまり、複数のプロジェクトで使われる Foo.bas があって、それを利用する Bar.bas もあるとき、新しいプロジェクトに Bar.bas を追加してコンパイルしようとすると…

カスタマイズ

毎日、日記を書いた後で10〜30分くらい、このはてなダイアリーのスタイルシートの設定をいぢっているのですが、イマイチ思い通りに進みません。しかも、ブラウズ環境が IE6 のみなので他のブラウザできちんと見えているのかすごく不安です。 私のブラウザは …

所持品が過剰で...

MdQ

それで、今困っていることは、所持品がいっぱいになってしまったことなのです。みんなdeクエストでは20個までの所持品では平常通りの行動ができますが、21個を超えると所持品を整理しないと何もできない状態になるのです。*1 所持品がいっぱいだと本当に何も…

幻の月

MdQ

今夏からは幻の月編として虹色の夜編ではなかった要素を取り入れ、新たな大地と新たなシナリオを楽しむことができるようになりました。虹色の夜編の世界と幻の月編の世界は相互に移動ができるので、参加者は漏れなく両方の世界を平行して楽しむことができる…

虹色の夜

MdQ

虹色の夜編は、メインストーリーの導入から始まり、行動の結果に対して素直に従っていればテンポよく話が進んでいきます。また、レベルアップなどの成長テンポが非常に高く、シナリオを楽しんでいるうちに十分なレベルやスキルを手に入れることができるため…

みんな de クエスト

月額300円のゲームで、http://mdq.square-enix.co.jp/ で提供されています。 ブラウザで選択肢から行動を選ぶだけのお手軽システムでRPG初心者でも大丈夫。1日5分でもプレイ可能なので忙しいサラリーマンの方でも安心して参加できます。それでいて奥の深いゲ…

みんな de クエスト

ネタが尽きそうなのです。

for each は Variant 専用?

VB

列挙可能なオブジェクトに対して列挙を実行する for each 構文ですが、列挙子の型として Variant 型しか受け入れてくれません。動的配列みたいに型が実行前からわかりきってる場合には、その型の列挙子を受け入れてほしいものです。