|
|
連載:[完全版]究極のC#プログラミング
Chapter14 拡張メソッド
川俣 晶
2010/03/01 |
|
|
14.7 拡張メソッドはオブジェクトの振る舞いを変更できない
継承を行うと、仮想メソッドや抽象メソッドを、新しいメソッドで差し替えることができる。これにより、オブジェクトの振る舞いを変更できる。たとえば、ToStringメソッドは通常「型名」を文字列として返すが、int型(Systen.Int32型)では、自分が持つ整数値を文字列として返す機能に差し替えられている。つまり、振る舞いが変わっているのである。
では、既存のメソッドと同じ名前のメソッドを拡張メソッドとして作成すると、メソッドを差し替えることができるだろうか?
これはできない。既存のメソッドのほうがつねに優先される。したがって、振る舞いを変更することはできない。それを示すリスト14.9を掲載する。
using System;
using X;
namespace X
{
static class B
{
// 拡張メソッド
public static void MyMethod(this A a)
{
Console.WriteLine("B.MyMethod called");
}
}
}
class A
{
public void MyMethod()
{
Console.WriteLine("A.MyMethod called");
}
}
class Program
{
static void Main(string[] args)
{
var a = new A();
a.MyMethod(); // 出力: A.MyMethod called
}
}
|
|
リスト14.9 同じ名前のメソッドが競合した場合 |
Insider.NET 記事ランキング
本日
月間