ようこそ。睡眠不足なプログラマのチラ裏です。

C#2.0

MSILコードジェネレータでアスペクト指向的なラップクラスを作る

アスペクト指向とはアスペクト指向とは、いわゆる“オブジェクト指向だけでは解決が困難であった問題”を うまいこと解決しましょうよという試みであり、オブジェクト指向に取って代わるものではなく、 オブジェクト指向を補完するためのものであり、オブジェ…

いまさら聞けない、ジェネリックでダウンキャストによる問題を回避

ジェネリックでダウンキャストによる問題を回避まず、ダウンキャストをしている問題のコード using System; namespace ConsoleApplication1 { public abstract class Hero { public Hero GetMyself() { return this; } } public class Ultramen : Hero { pub…

C#2.0の匿名メソッドによるカリー化

関数プログラミングとカリー化(引数束縛)この技法は、論理学者ハスケル・カリーにちなんで名付けられた。 カリー化の起源は、関数の数学的研究にある。 複数の引数を持つ関数について、任意の引数を固定(束縛)し、残った引数を持つ関数を取得しようという考…

いまさら聞けないC#2.0の匿名メソッドとクロージャ (Closure)

Joe Walnes - The power of closures in C# 2.0 http://joe.truemesh.com/blog//000390.htmlRubyとC#2.0のクロージャが比較されている。 こうあらためて見ると、やはりRubyの構文は洗練されているなーという印象。 クロージャとはクロージャとは関数の局所変…

デザインパターン第14回「Singletonパターン」その2

以前書いた、デザインパターン第7回「Singletonパターン」その1はこちらです。 結城先生のホームページに、Singletonのサブクラス化という記事がある。 Singletonの考え方にもいろいろあるけれど、その中の考え方のひとつ、 「(2) クラスごとに管理 ―― ク…

いまさら聞けない、IDisposableインターフェイス

マネジーリソースとアンマネージリソース.NET Frameworkで扱うリソースの種類は、大きく2つに分けることができる。 CLRが管理するマネージリソース(GCヒープ)と、CLRが管理しないアンマネージリソース。 ガベコレによってオートマチックに解放されるのが…

.ActiveSyncの同期接続状態を検知するには

PDA側でActiveSyncの同期接続状態を検知するには、Microsoft.WindowsMobile以下の名前空間のクラス群を利用する。 SystemStateクラスを用い、クレードルのステータスの変更イベントを検知するようにする。 そのイベントが発生したら、そのタイミングでActive…

デザインパターン第13回「NullObjectパターン」

デスマプロジェクトに放り込まれて、かなりヤラレていますが、 久しぶりに独りよがりなデザパタ講座です。 今回はGoFデザインパターン以外のパターンを取り扱いたいと思います。 スマートにコードを表現することができ且つ、ケアレスなバグを減らす効能のあ…

(続)リフレクションを利用したレイトバインディングでExcelファイルを開く

Excel関連でググってみると、「Excelのプロセスが残ってしまう・・・。」といった現象に陥ってる人が多いように思う。 Excelのプロセスが残らないようにするには、利用したCOMオブジェクトの参照を適切に解放してあげる必要がある。 例えば、レイトバインデ…

リフレクションを利用したレイトバインディングでExcelファイルを開く

VB.NETだとCreatObject関数を使って、暗黙の遅延バインディングを利用することによって、 お手軽に実現できる出来るExcelの操作も、C#で実現するとなると、ちょっと面倒くさいことになります。 事前バインディングでも実装することもできるが、事前バインデ…

別プロセスのスレッドに対するアタッチについて

実行中のアプリケーションが何かしらのタイミングで非アクティブとなり、 別のプロセスウィンドウの裏へ隠れてしまうようなことがある。 対応方法としては、単にFormをアクティブにすればよいのだが、 this.Activate() だけでは、うまく Form が前面に移動し…

IComparableインターフェイスを利用したソート

独自クラスについてソートをしたいような場合、対象クラスにIComparableインターフェイスを実装し、 それをCollectionにぶち込んでSort()メソッドを呼び出すことで、簡単にソートすることができる。 たぶん、staticなジェネリックメソッドを作成してICompara…

.NET Compact Framework2.0にSystem.Diagnostics.Stopwatchクラスがない件

なにかしらの負荷によって時間がかかっている処理があって、 その中でも最も負荷がかかっている箇所がどこなのかを特定するために、 各処理フェーズごとに時間を計測してログに吐き出すことにした。 おもむろに.NET Framework2.0から追加されたSystem.Diagno…

.NET Compact Framework2.0についてのだいたいのメモ

諸事情により、.NET Compact Frameworkを使うことになったので、 ちょっと適当にまとめてみる。 .NET Compact Frameworkとは.NET Compact Frameworkとは、Microsoftから提供されている 携帯電話やPDAなどの携帯情報端末向けのクラスライブラリで、 Windows向…

FizzBuzz問題と世界のナベアツ

※後にHaskellで書いたネタはこちら→Haskellで世界のナベアツ問題 ※後にPowerShellで書いたネタはこちら→PowerShellで世界のナベアツ問題FizzBuzz問題とは 1から100までの数をプリントするプログラムを書け。 ただし3の倍数のときは数の代わりに「Fizz」とプリ…

任意の型についてNullableであるかどうか判断する方法

public static bool IsNullable(Type type) { //クラス(参照型)かどうか if (type.IsClass) { // not Nullable return false; } //ジェネリク型かどうか if (type.IsGenericType) { //ジェネリック型の元となるSystem.Typeオブジェクトを取得し、それがNulla…

デザインパターン第12回「Proxyパターン」

公私共にモチベーション低いですが、久しぶりに独りよがりなデザパタ講座です。 今回はGoFデザインパターンより、「Proxyパターン」をぬるーく解説します。 ■Proxyパターンの概要■ Proxyとは「代理人」という意味です。 現実の世界での「代理人」のイメージ…