Insider's EyeC#への期待。アンダースからの返答デジタルアドバンテージ 一色 政彦 |
![]() |
|
|
|
C#に対する開発者からの要望
■C#でWin32ネイティブ・アプリケーションも作成できるようにしてほしい。
![]() |
もちろんC#のコードからWin32ネイティブのコードを生成することは実現可能である。しかしそうはいっても乗り越えなければならない課題がいくつかある。
例えば.NET Frameworkならガーベジ・コレクタによるメモリ管理がすべてのアプリケーション間で共有されるが、そういう共有がネイティブ・アプリケーションでは難しいことなどが挙げられる。ただそうはいっても、以前からある要望なので、これからも継続的に検討していきたいと考えている。
■C++から移行した多くの開発者が「typedef」(=型の別名を定義するキーワード)を欲しがっているが、C#では組み込まれないのか?
この要望も以前からあったが、typedefキーワードの問題点としては、型の別名を自由に定義できてしまうので、プログラマーにとって混乱を引き起こしやすいことが挙げられる(型の名前を見ただけでは、本当の型の種類が何か分からない)。
また.NET Frameworkでは、それぞれの型には1つの名前しか定義できない仕様になっている。従ってtypedefを効果的に使うには、.NET Frameworkレベルでの対応が必要になり、それが全言語へ反映されなければ意味がないだろう。しかしこの規模の対応を行うには、もう現時点では「ときすでに遅し」だ。ただ一応、今後も引き続き検討は続ける予定である。
■C++のfriend指定子に相当する機能を追加してほしい。
![]() |
実際のところ、.NET Framework 2.0では「フレンド・アセンブリ」(Friend Assembly)という新機能が搭載されていて、これによってC++のfriend指定子に似た機能を提供している(ただし、この機能を使うことで、確かにアセンブリ内部の型やメンバに、別のアセンブリからアクセスできるようにはなるのだが、private型やprivateメンバにはアクセスできないという問題がある)。
■Mix-in実装(以降、ミックスイン実装)を容易にしてほしい。
|
ミックスイン実装は、提供してほしい言語機能の1つとして度々取り上げられる。ミックスイン実装とは、多重継承を使わずに、既存クラスのメソッドなどの実装を、別のクラスに対して動的に追加する仕組みのことである。
もし仮に、C#でこの機能を提供するとなると、恐らく「ジェネリック型システム」(Generic Type System)の拡張という形になるだろう。例えば、印刷可能にする機能(=Printable機能)を任意のクラスにミックスイン(=動的に追加)できるようにしたい場合には、次のようなコードが考えられる(なおこのコードは、現在のC#ではサポートされていないことに注意すること)。
|
|
| アンダース氏が考えたミックスイン実装の例 | |
| これにより、Printable<T>クラスの印刷機能であるPrintメソッドを、ジェネリック型のTクラス(=つまり任意のクラス)に対してミックスイン(=動的に追加)できる。なおPrintable<T>クラスの基底クラスとして記されているジェネリック型の「T」は、当然ながら現在サポートされていない機能である。 |
![]() |
このようにジェネリック型のクラス(コード例では「T」)を基底クラスに指定できるようにすることで、ミックスイン実装が可能になる。この例において、印刷可能なフォーム・クラスを作成したいのであれば、「Printable<Form>」というミックスイン・クラスを宣言するか、あるいはこのミックスイン・クラスからの派生クラスとして「class MyForm : Printable<Form>」のようなクラスを宣言するだけで、通常のフォーム・クラスに対して印刷機能を追加できるわけである。
だが、このミックスイン実装の言語設計・実装にかかるコストとそのほかの取り入れるべき機能をてんびんにかけると、最終的には「ミックスイン実装に対応しない」という結論になるだろう。
■COM(Component Object Model)のIDispatchインターフェイスに対する遅延バインディング(Late Binding)を提供してほしい。
VB(Visual Basic)では遅延バインディングをサポートしているが、C#にもそれを搭載することが良いのか悪いのかという判断は難しいところだ。
というのも、遅延バインディングは使い方をちゃんと理解して使っている分にはとても役に立つ機能なのだが、使い方を間違えるとパフォーマンスを低下させる原因になりかねないからである。例えばVBプログラマーが、遅延バインディングが有効になっていると知らずに、Object型を使って遅延バインディングを行ってしまい、予想外に処理に時間がかかってしまうようなケースはよくある。
いまのところ、遅延バインディング機能を追加するような計画はない。だがIDispatchインターフェイスしか備えていないようなレガシー・コンポーネントの場合や、複数バージョンのMicrosoft Officeをオートメーションしようとする場合などでどうしても遅延バインディングが必要となるということは、確かに検討に値する課題だ。これについては、頭に置いて検討することをお約束する。
| INDEX | ||
| Insider's Eye | ||
| C#への期待。アンダースからの返答 | ||
| 1. アンダース氏が明かすC#言語設計の秘話 | ||
| 2. C#に対する開発者からの要望 | ||
| 3. C#自体やその将来に対する疑問、他言語に対する意見 | ||
| Insider's Eye |
TechTargetジャパン
- Kinectが切り開く“夢の近未来” (2012/2/2)
日本を含めた世界中でKinect for Windowsセンサー商用版とSDK正式版がリリース。未来のコンピューティングはどう変化するのか? - 3つの視点でネイティブと.NETの適材適所を考察 (2012/1/31)
アプリ開発は「ネイティブ」と「.NET」、どちらが最良? その問いには「適材適所」と答えるしかない。では、“適所”は一体どこかを考察する - SQL Azure Data Sync入門 (2012/1/30)
SQL Azure/SQL Serverデータベース間のデータ同期を簡単に実現するサービスとは? その仕組みや使用手順を解説 - Windows Phoneアプリ市場の現状を分析する (2012/1/27)
Windows Phone のアプリ・ストアに日々登録されている多種多様なアプリ。カテゴリ別のアプリ数は? 市場の現状を明らかにする
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -





