Skip to content

CSharp

C# 6 の新機能でプロパティの初期化をシンプルに書く

C# 6 の新機能 のひとつに『自動プロパティの初期化を書けるようになった』というものがあります。従来 〜 新機能を簡単にまとめると以下の通りです。

  1. 従来のプロパティ実装ではコードが長くなりがち
  2. 自動プロパティを使うとコードは短くなるが、初期値を指定出来ない
  3. C# 6 の拡張を使うと、自動プロパティに初期値を指定出来るようになった

C# 6 の新機能でシンプルに文字列を埋め込む

C# 6 で追加された新機能 は川俣晶さんの著作「C# 6 実践的プログラミング[入門]講座」によくまとまっています。

新機能のひとつに『直接、文字列を埋め込めるようになった』というものがあります。この新機能を使うと string.Format や「+ による文字列の連結」を多用することなく、シンプルに記述することが出来るようになります。

C# から Selenium Web Driver を利用してみる

「単調な Web の試験を自動化したい」と思うことは良くあります。こういった場合は Selenium が便利です。

Selenium の種類

Selenium には歴史的経緯から、以下のような種類があります。今回は Selenium WebDriver を使います。

  1. Selenium 1(通称、「Selenium Remote Control」または「Selenium RC」)
    • JavaScript として実装されている
    • ブラウザ毎に共通実装なので、「あるブラウザでは動作するが、別のブラウザでは動作しない」という、ブラウザ毎の JavaScript 実装差異の影響を受ける可能性がある
    • ブラウザのサンドボックスにロードされ、実行される。つまり、サンドボックスの制限を受ける
  2. Selenium 2(通称、「Selenium WebDriver」または「WebDriver」)
    • ブラウザ毎にドライバーが提供される
    • ドライバーを経由し、外部からブラウザを制御する
    • Selenium RC のように、サンドボックスの影響は受けない

ToolStripProgressbar のサイズを自動的に変更する

StatusStrip の内部に ToolStripProgressBar を設置しても、ウインドウや StatusStrip のサイズ変更時に ToolStripProgressBar のサイズは追従せず、変更されません。このような場合は StatusStrip の Resize イベントが発生した際に ToolStripProgressBar のサイズを変更するコードを書きます(もっと上手なやり方も、あるかも知れません)。

Mac アドレスをコピーしたらベンダー名を表示する

以前にクリップボードの内容が変更されたら通知するツールを作りました。

しかし、.NET Framework には Clipboard を表現するクラス はあるものの、クリップボードの変更を通知するイベントが無い為、上述のツールでは「一定間隔でクリップボードの内容を取得し、前回の取得時と差分が無いか確認することで変更を検知する」という些かイケていない方法で実装していました。しかし、@IT で Win32 API の SetClipboardViewer を使ったサンプル記事「.NET TIPS - クリップボードの内容をリアルタイムに取得するには?」が公開されていたので、Win32 API を使ってツールをつくり直してみました。ただ、これだけではアレなので、クリップボードにコピーされたテキストが Mac アドレスだった場合はベンダー名を表示するように実装してみました。動作には .NET Framework 4.0 が必要です。

「xx.xx.xx.xx.xx.xx」(ピリオド区切り)や「yy:yy:yy:yy:yy:yy」(コロン区切り)、「zz-zz-zz-zz-zz-zz」(ハイフン区切り)といった形式の Mac アドレスをクリップボードにコピーすると、以下のようにベンダー名を表示します。

file

List と LinkedList の性能差

数年前から Java やその他の言語を書く機会がめっきり減り、(自分で選択出来るのであれば)C# で書くようになりました。「Eclipse よりも、Visual Studio が好きだから」という理由が大きいのですが・・・川俣晶さんのプログラミング関連書籍は興味深いものが多く、しばしば拝見させて頂いていますが、C# を書く機会が増えたので以下の書籍は購入させて頂きました。ちょうど上から順に "C# 2.0", "3.0", "4.0" がテーマとして取り上げられています。

そもそも、System.Collections.Generic.List も System.Collections.Generic.LinkedList も一次元リストを扱うものですが、List はインデックスを指定することで任意の位置にアクセス出来るが、LinkedList はインデックス指定ではリストにアクセス出来ず、先頭か、もしくは末尾から順に目的のデータ位置まで辿っていかなければならない、という機能差があります。「究極のC#プログラミング」では System.Collections.Generic.List と System.Collections.Generic.LinkedList の性能差について言及してあり、面白そうだったので検証してみました。

.NET Assembly を mono と関連付ける

Linux 上でも mono を使うと .NET Framework を動作させることが出来ます。Linux 環境で mono をインストールする方法は 以前の記事 に書きましたが、このままでは .NET のプログラム(.NET Assenbly)を実行する都度、以下のように mono を実行する必要があります。

1
2
$ mono hello.exe
Hello, World!

binfmt_misc という仕組みを使うと、毎回、"mono" としてしなくても、あたかも ELF と同等に .NET Assembly を実行出来るようになります。余談ですが、binfmt_misc の公式ページ は 404 not found になっているようです。

C# で引数に指定されたオプションを取得するには

幾つかのプログラミング言語では引数に指定されたオプションを取得する為に getopt ライブラリが用意されており、代表的なところでは GNU GetOptPython の getopt があるかと思います。

.NET Framework 標準ライブラリ中には getopt と同等のライブラリは無いようですが、幾つかライブラリが公開されているようです。

ここでは一番下の "C# Getopt class" を試してみます。

MonoTouch 開発チュートリアル

一般的に iPhone 向けのアプリケーションは Objective-C で書きますが、MonoTouch を使うと、C# で iPhone アプリを開発することが出来ます。Apple は iPhone 上にスクリプトエンジンや JIT コンパイラを実装することを許可していないのですが、MonoTouch はコンパイルを静的に行い、JIT コンパイラなどの不要なランタイムを省くことで、Apple のライセンスに抵触することなく、iPhone 上で C# による開発を実現しているそうです。詳しくは以下の URL が参考になります。

MonoTouch の公式ページには素晴らしい チュートリアル が用意されており、ここではそのチュートリアルに従って MonoTouch で iPhone アプリケーションを開発してみます。