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

C#2.0

Undo,Redoの実装って何回かしかやってない気がする。ジェネリックなCommandパターンとMementoパターンの応用で大体いけそうな気がする。

不足気味でしたので、たまにはC#分を補充しておきます。 ↓ ↑ もう1年近く前になるんですね。以前、下記のエントリが注目を浴びていて、 わたしも楽しく読ませてもらいました。 Undo,Redoの実装って何十回もやってる気がする - あしあと日記 http://d.hatena…

シリアル化可能なStateパターン的に使えるタイプセーフEnum。たぶん最終形態(フリーザ様的な意味で)

id:atsukanrockさん、トラックバックありがとうございます。 「 熱燗ロックのブログ - .NET Frameworkで、シリアル化可能なタイプセーフenumを実装する - その2」を受けまして、 さっそく、まねまねさせて頂まして、再びTypeSafeEnumを書き直しました。 そう…

C#で振舞いを抽象化してStateパターン的に使えるTypeSafeEnumを書いてみた。Delegate.DynamicInvokeのオーバーヘッドっていかほどなの?

以前書いたAbstractなTypeSafeEnumでは、振舞いについてFuncデリゲート固定として実装していました。 でもやっぱり、ちゃんとしたStateパターン的なTypeSafeEnumが欲しいよね。 というわけで、タイプセーフEnumの振舞いについてジェネリックで抽象化してみま…

OrderedDictionaryクラスのジェネリック対応してみた。System.Collections.Specialized 名前空間以下のコレクションはジェネリック対応されていないんだよね。

System.Collections.Specialized 名前空間以下のコレクションについて以前、「.NET Frameworkの代表的なコレクションとかいいつつ非ジェネリックって…?なんぞこれ。」を書きました。 このエントリでは、素敵な方たちにはてなスターを頂き、共感していただけ…

C#からOpenCVで顔を検出して"ゆっくり"してみよう

なにやら↓こういうのが流行っていたようですね。元ネタ Perlでアニメ顔を検出&解析するImager::AnimeFace Yukkurizer - アニメキャラゆっくり化CGI 何かを受信(^o^)ノ *1 ゆっくりしてみようというわけで、やつけで適当にC#でゆっくりしてみました。 C#やVB…

演算子オーバーロードを活用してジェネリックオペレータを作る。それは即席自作演算子的な何か。

C#に限った話ではなく、その他のプログラミング言語(C++やD言語など)でも、 演算子オーバーロードを利用するようなケースは非常に限られていると思う。 というのも、適切に利用せずに無闇に使うとメリットよりもデメリットの方が大きくなる場合が多いからだ…

.NET Frameworkの代表的なコレクションとかいいつつ非ジェネリックって…?なんぞこれ。

CodeZineにて .NET Frameworkの代表的なコレクションと使い方 http://codezine.jp/article/detail/3640 という記事がありまして、結構な数のはてブをゲットしている人気記事のようでした。 でもなんで?というのが正直な感想です。「なんで?」の意味すると…

CSPで暗号化する場合、非対称秘密キーをローカルなんかに平文で保存しないでください。

[方法:キー コンテナに非対称キーを格納する] http://msdn.microsoft.com/ja-jp/library/tswxhw92.aspx 非対称秘密キーは、ローカル コンピュータにそのまま平文として保存しないでください。 秘密キーを格納する必要がある場合は、キー コンテナを使用する…

ジャグ配列ジェネレータ(ちょっとしたスニペット)

ジャグ配列を作るのって、じみ〜に面倒だったりしませんか。 そんなあなたに、ちょっとしたC#スニペット。こんなんどうでしょう。 using System; using System.Drawing; using System.Runtime.CompilerServices; namespace ConsoleApplication1 { public cla…

globalコンテキスト キーワードと名前空間エイリアス修飾子(::演算子)

確かC#2.0から地味に(こっそり)追加されたキーワードだったと思いますが、 globalコンテキスト キーワードって、マイナーっぽいですね。 これを使って書いてるコードを仕事では見たことがないし。完全に存在が忘れられている感すらあります。 オライリー本の…

ExpandableObjectConverterっていちいち実直に実装するのは面倒だよね。Reflectionを活用してネストしたプロパティを楽に量産してみよう。

ExpandableObjectConverterのサブクラスで実装する内容TypeConverterAttribute属性を用いて、ExpandableObjectConverterおよび、その派生クラスを指定することで プロパティグリッドにネスト表示されるプロパティを作成することができます。 通常、Expandabl…

動的にDLL(ライブラリ)をロードしてアセンブリを作って、P/Invokeなdelegateを生成してみよう。

C#で動的にDLL(ライブラリ)をロードしてアセンブリを作って、P/Invokeなdelegateを生成動的にDLL(ライブラリ)をロードするというシナリオは、意外と要求されることが多いのではないかと思います。 利用する関数があらかじめ明確になっているのであれば、その…

C#で和暦について本気出して考えてみた【初級〜中級編】IFormattable、ICustomFormatter、IFormatProviderインターフェイスを実装してみよう。てゆうか、プロのプログラマなら当然正規表現を使いたいよね!

思いつきで「C#で和暦について本気出して考えてみた」の不定期連載を開始します。 タイトルが長すぎというツッコミは、心の中にそっとしまっておいてください。 予定している連載内容【初級〜中級編】 和暦構造体を作ろう。 IFormattable、ICustomFormatter…

任意のジェネリック型を動的に生成

ちょっとしたスニペットを置いておきます。任意のジェネリック型を動的に生成するためのメソッドです。 例えば、アセンブリ外に非公開の型についてジェネリック型を利用したいような場合等に有用です。 System.ReflectionやらSystem.Reflection.Emitを使って…

さっそくC#でプログラム言語「てってってー」のインタプリタを書いたよ

何かを受信(^o^)ノ プログラム言語「てってってー」 javascript - てってってー言語を移植してみた - 404 Blog Not Found Wikipedia - Brainf*ck というわけで、C#erな自分はC#で「てってってー言語」のインタプリタを書いてみました。 基本「Brainf*ck」の…

C#で順列(Permutation)と組み合わせ(Combination)をすべて列挙してみよう

さて、いきなり少年メリケンサックですが、気にしないでください。帰らないでください。内容はまともです。 C#で順列(Permutation)を列挙する実装については、割と書いている人がいます。 でも、組み合わせ(Combination)を列挙する実装は、あまり書かれてい…

モテようとして、C#でXOR使ってリバースしている奴がいたんですよ

いろいろなリバースのアルゴリズムを見てみましよう。 まずは表題のリバースのアルゴリズムについて、どうぞ。なんとなくモテようとしている感のあるリバースモテようとして、C#でXOR使ってリバースしている奴がいたんですよ・・(以下略)。 こんな感じで pub…

型なしDataSetと型付DataSet、そして片想いORマッピング的な何か。

ネタ元 山本大@クロノスの日記 - アンチ型付DataSet派の自作ORマッピングよりなぜ型付DataSetを使うのか、型なしDataSetは使わないのか型付DataSetについては、嫌な思い出も少なくないので不満がないわけでもないのだけど、 常識的に考えて「型付DataSetを…

常識的に考えてErrorProviderを使いたいよね

VB.NETでもC#でもいいんだけど、.NET Framework2.0以降でWindows.Formsなアプリを作る場合、 入力検証を行うようなときは、ErrorProviderを使いたいよね!*1というお話は、 .NETで飯を食っている人にとっては割と常識ではないかと思っていたのだが、実際のと…

C#でFLVファイルをお手軽再生

ニコニコ動画などから得られるFLVファイルですが、 C#でお手軽に再生するには、ActiveX Control(AxShockwaveFlash)に頼るといいっぽい。 アスペクト比が指定できなかったり、再生できないFLVも結構あるようですが、まぁお手軽ということで。 ※FLVファイルを…

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

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

yield(いーるど)は、つまるところコルーチンなんだよね

今更感は否めないが、yield(いーるど)についてちょっとしたおさらいを。 yield(いーるど)はコルーチンであるご存知のとおり、yieldはC#2.0から主にイテレータの実装の簡素化を目的として導入された便利機能。 このyield キーワードは単体では意味を成さない…

C#でEval先から自身のメソッドが呼び出せる件

C#でもEvalできちゃう件については、既に語りつくされていますが、 Eval先から自身のアセンブリのメソッドを呼び出せる件については案外知られていないかも、とか。 私は知りませんでした。もしご存知でしたら、華麗にスルーしてくださいw using System; us…

疲れている人のためのコードスニペット in C# できました

いまさらながら、何気にコードスニペットって自作したことなかったなーと思いまして。 「疲れている人のためのコードスニペット in C# (orz.snippet)」作りました。習作です(これはひどい)。われながら素晴らしく実用性のあるコードスニペットであると自負し…

デザインパターン第15回「Iteratorパターン」その2

以前書いた、デザインパターン第10回「Iteratorパターン」その1はこちらです。 以前書いたときは、ただ単にIEnumerableインターフェイスおよび、IEnumeratorインターフェイスを そのまま利用しただけの例について、イテレータパターンを学習しました。 今…

ゆの in C#

元ネタ存じ上げませんが、「ゆの in language」っちゅーハック遊びが ここ最近流行っていたらしいので、C#でも。 ええまあ、なんの捻りもなく演算子のオーバーロードですが…(^ω^;)サーセン using System; namespace ConsoleApplication1 { public partial class …

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

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

いまさら聞けないアルゴリズム その1「ハノイの塔」

なんの変哲もないC#で書いた「ハノイの塔」です。 それ以上でもそれ以下でもありません。もちろん模範解答というわけでもない。 using System; using System.Collections.Generic; namespace ConsoleApplication1 { public class Program { private static v…

いまさら聞けないカスタム属性

enumのフィールドに対応する日本語リテラルを付加するためのカスタム属性を書く /// <summary> /// 元号 /// </summary> private enum Gengo { 明治, 大正, 昭和, 平成 } enumのフィールドは、上記のように日本語で指定することも、もちろん可能なんだけど、 コードの中に日本語…

ジェネリックとシリアライズを利用したオブジェクトのディープコピー

C#やVB.NETではオブジェクトのCloneを行うと参照のみがコピー(シャローコピー)される。 シャローコピーは、値を変更するとコピー元のデータも変更されてしまうので、なにかと都合がよくないことが多い。 オブジェクトのバックアップを取りたいような場合は…