|
|
連載:[完全版]究極のC#プログラミング
Chapter14 拡張メソッド
川俣 晶
2010/03/01 |
|
|
14.4 スイッチなしで機能する例
ここで1つだけ注意が必要である。実は、using文を用いてインポートする(スイッチを入れる)ことなく、拡張メソッドが有効になってしまうケースが存在する点である。
リスト14.6では、Visual Studio 2008でコンパイルしたとき、「using Y;」抜きで拡張メソッドを呼び出すことができてしまう。
using System;
namespace X
{
class A
{
}
}
namespace Y
{
static class B
{
// 拡張メソッド
public static void MyMethod(this X.A a)
{
Console.WriteLine("MyMethod called");
}
}
class Program
{
static void Main(string[] args)
{
var a = new X.A();
a.MyMethod();
}
}
}
|
|
リスト14.6 スイッチなしで機能する例 |
拡張メソッド自身が呼び出すコンテキスト上のデフォルト名前空間上にあるときは、特に明示的なインポートを指定しなくても呼び出せるようである。しかし、それが言語仕様上、妥当な挙動であるかまでは判断し切れなかった。このような書き方は、通常行わないと思うが、勉強のためのテストプログラムなどで書いてしまうことがありうるので、特に注意喚起のために載せておく。
Insider.NET 記事ランキング
本日
月間