Code

ラッパークラスの生成

メソッドの呼び出しをログに書き出すようにしておくと、トラブル時に役に立ちます。でも、そのようなトレース書き出しをあちこちに埋め込むと、ソースコードが読みにくくなってしまいます。.NETではRealProxyを使ってメソッドの呼び出しに割り込めて、所謂、…

MSNメッセンジャーの呼び出し

ふと思い立ってC#からMSNメッセンジャーを呼び出してみようと実験。サンプルを探してみたのですが、現在サポートされていないインタフェースを使ったものがほとんどでした。代替となるものを探したのですが、一番大事なテキストの送信が見つかりません。ヘル…

POP3クライアント

ネットの掲示板や会議室で時々、POP3クライアントを作りたいというのを見かけます。BCLではSMTPはあるのに何故かPOP3は無いんですよね。で、考えてみたら、私も作り方知らなかったり。(^^; 折角なので電子メールプロトコルの本ひっくり返しながら、てきとー…

TypeDelegatorって?

VS.NETでF5やCTRL-F5を押すと突然終了してしまう現象に悩まされました。最初、VS2005を入れた所為だと思い、アンインストールをしてもちっとも直らず、あれこれ消していたらやっと直った。どうやら、DevPartnerの体験版が壊れていたみたいでした。おかげでVS…

文字列の繰り返し

パフォーマンス関連の小ネタ。IronPythonのソースを読んでいてこんなのを発見。 public static string Multiply(string s, int count) { int sz = s.Length; if (sz == 1) return new string(s[0], count); StringBuilder ret = new StringBuilder(sz*count)…

Binding使ってます?

HTMLの手動解析はもう嫌だ・・・とかちょっと弱っているのですが、ネタがないので結局Visual Studio立ち上げる羽目に。(^^;さて、WinFormなアプリを作るとコントロールに値を入れたり戻したりという単純作業に結構手間が掛かったりします。この辺の設計はMVC…

名前空間とアセンブリ

が、一致していないのは分かっていますが、それでもある程度、想像がつくものにして欲しいですよね。ところで、.NET2.0ではスペシャルフォルダを取得するクラスがサポートされました。名前空間はSystem.IOです。さて、このSpecialDirectoriesクラスを使うに…

CTRL-Cのトラップ

CではCTRL-Cをトラップするのにsignal関数を使ったりしましたが、.NET2.0ではConsoleクラスでサポートしてくれるようになりました。 using System; class Program { static void Main(string[] args) { // CancelKeyPressイベントを登録 Console.CancelKeyPr…

コンソールで遊ぼう

.NET2.0ではConsoleクラスも結構強化されているみたいです。特にキーが押されているかどうかを判定できるようになったのが嬉しい。早速、ありがちなゲームをこさえてみました。(^^; using System; class Program { const int W = 79; const int H = 24; stat…

プリミティブ型のGenerics

http://d.hatena.ne.jp/akiramei/20040710#p3 プリミティブ型に対してOperatorが使えるようにとの要望があがっていましたが、今のところ投票は7つで、あんま必要とされていない感じです。多分、採用されない気がするので自分でプリミティブ型に対するジェネ…

ILバイトコード再び?(復刻版)

日記を上書きして潰してしまいました。はてなにアップしたソースは削除しているので手元にソースコードすら無い状態なので、かなりショック。なんとか記憶から引っ張り出してソースだけは復元しました。取りあえず、これで許して・・・確か、こんな感じで始…

Unicodeプロパティ

Unicodeは文字エンコーディングの一種ですが文字の性質も定義されています。ここで言う性質とは例えば大文字だとか数字だとか記号といったものです。Unicodeをサポートしている正規表現ではこのような性質を使ってマッチさせることが出来ます。(と、思ったけ…

先読み、戻り読み

viで正規表現を覚えたため、機能拡張されている部分は疎かったりします。特に(?で始まるものは苦手で精々(?:...)くらいしか知らなかったり。使える武器は多い方が良いのでちょっと勉強し直しています。 (?=...) : 肯定先読み (? (?!...) : 否定先読み (?

初めてのC++/CLIその3

今回は型についてです。C#やっててC++を知らない場合、class/structで混乱するかもしれません。C++におけるclass/structは単にアクセス修飾子のデフォルトがprivate/publicの違いだけです。では値型、参照型は何で決まるのかというとref/valueキーワードに因…

初めてのC++/CLIその4

templateとgenericsの比較。genericsはよくtemplateみたいなものと紹介されますが、実際のところtemplateに比べると出来ることはかなり限定されています。なので、boostみたいなライブラリをこさえてやるぜ!みたいなこと考えているとガッカリします。(^^; …

初めてのC++/CLIその2

基本からということで文字列と配列について実験です。 #include "stdafx.h" using namespace System; using namespace System::Runtime::InteropServices; using namespace std; // arrayやpin_ptrを使うのに必要 using namespace stdcli::language; void te…

初めてのC++/CLI

最近、すっかり遠のいているC++ですが、今回は結構変わったのでちょっと弄ってみようと思います。 #include "stdafx.h" using namespace System; // ネイティブなクラス class NativeClass { std::string name; public: NativeClass(const std::string& name…

C#でプリプロセッサ

コメントへのレスです。(^^; Nemerleのマクロだとコンパイル時と実行時の両方で呼び出されるので、コンパイル時にごにょごにょすれば出来そうですが、C#ではそんな小細工出来ないので、コメントとか#if〜#endifとかで埋め込んで処理するしか無い気がしますね…

ILバイトコードを取得

ちょっと前にWindows.Formsを見ていくようなことを言っていましたが、GUI関連は画像がない分かり難く日記向けなネタじゃないのであっさり止めて、クラスライブラリ探索にしました。(^^; 今回はリフレクション関連で追加されたMethodBodyを弄ってみました。 #…

Beepで音楽

.NET2.0でBeepがサポートされ、しかも周波数も指定できるのでちょっと演奏させてみました。 #region Using directives using System; using System.Collections.Generic; using System.Text; #endregion namespace ConsoleApplication1 { enum SCALE { C = 0…

WebBrowserコントロール

C#2.0の目新しい機能はだいたい弄ってみたので、そろそろGUI関連に手を出してみます。.NET2.0では念願のWebBrowserコントロールがサポートされ、アプリケーションに手軽にWebブラウザ機能をつけることが出来ます。画面からフォームにWebBrowserコントロール…

Genericsへの不満

概ね好印象なC#2.0ですが、Genericsでちょっとイマイチなところがあります。C++のテンプレートのサンプルにありそうな例ですが、C#では、これが出来ません。 #region Using directives using System; using System.Collections.Generic; #endregion namespac…

Iteratorの調査

引き続きIteratorで色々実験。他の言語のスライスの真似事をさせてみました。便利そうなんですが、パフォーマンス的にはちょっと駄目かな。 #region Using directives using System; using System.Collections.Generic; using System.Text; #endregion names…

Iteratorの使いどころ

ディレクトリ走査みたいな処理に威力を発揮しそう。 #region Using directives using System; using System.IO; using System.Collections.Generic; #endregion namespace ConsoleApplication1 { delegate bool Predicate(FileSystemInfo fsi); class Progra…

2005年C#の旅その5

今回はIteratorについて。Iteratorというとforeach専用みたいな感じで紹介されることが多いです。確かに、IEnumerator/IEnumerableを用意するのは面倒だったので大変便利ですが、Iteratorはプログラムの書き方変えてしまう可能性がある気がしています。単な…

2005年C#の旅その6

今回はPartial Classについて・・・なんですが、ちょっとしたネタを思いついたので、それを。まずは、サンプルから。 #region Using directives using System; using System.IO; using System.Collections.Generic; using System.Text; #endregion namespace…

2005年C#の旅その4

C#2.0の目玉の一つはなんと言ってもGenericsです。色々なところで話題になったので今更取り上げるネタもあまり無いのですが、その中でも影の薄そうなところをピックアップしてみます。(^^;まずは、簡単なGenericsの例です。 #region Using directives using …

2005年C#の旅その3

C#で名前空間を使う場合に、同じ名前の名前空間を使うと同名の名前空間を隠してしまう問題がありましたがC#2.0ではglobal::が導入されて回避出来るようになりました。以下、サンプル。 namespace MyNamespace { namespace System { class MyClass { } } name…

2005年C#の旅その2

今回は匿名メソッドについて見てみたいと思います。匿名メソッドを使うと処理のブロックをメソッドの引数として渡すことが出来るので、ほとんど同じだけど一部だけ異なるメソッドとかで威力を発揮します。また、delegateも使いやすく改善され、また、パフォ…

Nullable Type補足

昨日のテストで1つ実験し忘れていました。Nullable Typeにnullが設定されている場合、Valueプロパティにアクセスするとどうなるのでしょうか? using System; class Program { static void Main(string[] args) { int? a = null; try { Console.WriteLine("…