.NET で Excel を扱うことになったのですが、わたし自身一度もプログラムから Excel を扱ったことがなかったので、じゃんぬさんのホームページを参考にして少し触っていました(C#)。
既存の Excel ファイルを開いて操作する必要があったので、「既存の Excel ブックを開く」のページを見てみたら、あら不思議。C# のサンプルがないじゃないですか!(^^;)
とりあえず VB.NET のコードを C# に書き換え、いざビルドしてみるとなぜかエラーが。どうやら Excel.Workbooks.Open メソッドに渡す引数が足りないとのこと。じゃんぬさんが引数の数を間違えるはずがないと思い(^^)、VB.NET のプロジェクトで同じコードを書いてみるとなぜかこっちはビルドが通る。なぜだ!?
ヘルプで調べてみたら、Excel.Workbooks.Open メソッドの第二引数以降に Optional キーワードが付けられていて初期値が与えられているようでした(多分元が VB か VB.NET で作られているのではないでしょうか?)。しかし、C# には Optional キーワードのようなメソッドの引数に初期値を与えるような概念自体がないので全ての引数にパラメータを指定しなければいけません。
とは言うものの、そもそもどのような値が初期値なのかがわからないので困りものです。全部 null にしたら案の定例外が発生してしまいました。
で、ネットでいろいろ調べてみたら下のリンク先ページを発見し意外な事実が判明!
なんと C# では引数に「Type.Missing」を渡すことにより、Optional 指定された初期値が使えるのです!こんな使い方があるとは今まで知りませんでした。もちろんこれを指定したら C# でもきちんと動きました。
[結論]
クラスライブラリを作るときに Optional を使うと VB.NET 以外の言語での実装が面倒になります。オーバーライドオーバーロードしましょう。
[余談]
# 実はこの記事を書いた後にふじさきさんがまったく同じネタを書いていたことに気づいたorz でもせっかく書いたのでアップ(^^;)
# 今度から調べ物をするときはわんくま内から検索しよう(^^)