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

C#

ボタン連打しないでね☆ それはPeekMessageでメッセージループ

Buttonのクリック処理が動作している最中に他のButtonやコントロール等をクリックした場合でも、 そのクリック操作をすべてシカトしたいなんてことはよくあるお話。 なぜクリック処理中のクリック操作がシカトされずに処理されてしまうのかと言えば、 クリッ…

コンストラクタのインターセプトとアドバイス、それはアクセプト指向的な何か。

まずは、アスペクト指向プログラミング(AOP)的な用語の簡単な説明とか。アドバイスとはアスペクト指向で言うところのアドバイスとは、「どのような処理を行うか」のことを指す。 コード(ある処理)に対してインターセプトを行い、そこで「何」を行うのか、そ…

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

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

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

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

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

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

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

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

.NET Compact Framework version 2.0にSystem.Data.SqlClient.SqlBulkCopyクラスがない件

.NET Framework2.0 で新しく追加された、 System.Data.SqlClient.SqlBulkCopyクラス*1もサポートされていないわけだが・・・。 これって、.NET Compact Frameworkだからこそ必要なクラスだと思うのだが。 (;゚Д゚)ポカーン そもそもSQL Server 2005 Compact Editi…

いまさら聞けない.NET テクノロジの例外管理の設計および実装のガイドライン その2

例外の検出.NET Framework では、他の一般的な水準のオブジェクト指向プログラミング言語と同じように、 構造化例外処理を利用して例外を適切に処理することができる。 構造化例外処理とは、例外と保護されたコードブロック、およびフィルタを含む制御構造に…

いまさら聞けない.NET テクノロジの例外管理の設計および実装のガイドライン その1

例外管理ポリシーアプリケーションの内部で発生した例外を管理する際には、いくつか考慮すべきことがある。 まず、「発生した例外をどのタイミングで捕捉するのか」、「捕捉した例外をどのように処理するのか」、 そして、「捕捉した例外をどのように伝播さ…

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

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

データバインディング その1

単純にSystem.Windows.Forms.Formを継承したFormに配置したTextBoxのTextプロパティに対して、 特定のクラスのプロパティをバインドする方法の1つを示します。 方法その1、.NET Framework 1.1の場合。「プロパティ名 + Changed」 イベントの提供これだけで…

遅ればせながら、Visual Studio 2008 Beta 2 日本語版をインストールしてやったわブワハハハア!!(壊 (ダウンロードに2時間、DVD-R焼くのに20分、VSインストールに1時間、MSDNインストールに1時間・・・。) Visual Studio 2008 Beta 2 日本語版 http://www.…

入れ子になったユーザーコントロールの DesignMode プロパティについて

マイクロソフトのサポートオンラインによると 入れ子になったユーザーコントロールの DesignMode プロパティは、 False に Visual Studio .NET または Visual Studio 2005 に常に設定されます。 現象 Microsoft Visual Studio .NET または Microsoft Visual …

アパートメントモデルと、.NETのSTAThreadAttribute

アーパートメントモデルの種類COMコンポーネント*1は、大きくシングルスレッドアパートメントモデル(STA)と マルチスレッドアパートメントモデル(MTA)に分けることができる。 レンタルスレッドアパートメントモデル(RTA)というのもあるようですが、詳細…

ビットタイプの列挙型(FlagsAttribute属性)について

※後に書いた、「FlagsAttributeとビット演算のちょっとしたレシピ」はこちら →http://d.hatena.ne.jp/zecl/20081223/p1 基本的ではありますが、.NETにおける、ビットタイプの列挙型のお話。 Enum型にFlagsAttribute属性を与えると、ビットフィールドとして扱…

IClonableインターフェイスとMemberwiseCloneメソッド

今日は、.NETにおけるクローンオブジェクトなお勉強です。 インスタンスの中身をコピーする方法は、大きく分けて3つあります。 1つは、何も考えずにインスタンス内のメンバを手動でコピーする方法。 2つ目は、System.Reflectionを利用して、メンバをコピ…

デザインパターン第10回「Iteratorパターン」その1

後に書いた、デザインパターン第15回「Iteratorパターン」その2はこちらです。 なんだかんだで10回目を迎えましたデザパタ講座です。 さて今回は、GoFデザインパターンより「Iteratorパターン」をぬるーく解説します。 Iteratorパターンは、集約オブジ…

System.Windows.Forms.Formの派生クラスをシリアライズしてみる

画面オブジェクト(System.Windows.Forms.Formの派生クラス)の、 特定のプロパティをシリアル化してXMLに保存したり読み込んだりする機能について、必要に迫られました。 特定のプロパティを抽出してSerializableなクラスをつくり、それを画面オブジェクトの…

Webサービスでクラス渡しを実現するためのメモSystem.Xml.Serialization.XMLSerializer や、 System.Runtime.Serialization.Formatters.Soap.SoapFormatter というクラスがある。XMLSerializerはPublicなフィールドのみがシリアライズ対象となって、 SoapFor…

第1回「C#とVB.NET比較 」

■中間コードによる、大文字、小文字の識別 2つの言語の違いを比較する際に、まず思い浮かぶのは、両者の構文の相違である。 まず、構文を語る上で避けて通れない大きな違いのひとつは、 C#では大文字と小文字の違いが区別されるのに対し、VB.NETでは区別さ…

boxingとunboxing

ボックス化(boxing)とは、基本型(primitive type)からオブジェクト型(object type)へ変換することです。 その逆ををボックス化解除(unboxing)と呼びます。 これはつまり、値型と参照型を必要に応じて相互変換する機能です。 boxingは値型を参照型に変換する…