2 つの参照型間の明示的な変換設定があります。
class Car
{
public void Foo(Car car)
{
}
public static explicit operator Bike(Car car)
{
return new Bike();
}
}
class Bike
{
}
Foo を呼び出して型を渡す場合はBike
、明示的な変換を実行する必要があります。
Car myCar = new Car();
Bike bike = (Bike)myCar;
myCar.Foo(bike);//Error: Cannot convert from Bike to Car.
ただし、拡張メソッドを追加すると、明示的な変換は不要になります。
public static void Foo(this Car car, Bike bike)
{
car.Foo(bike);//Success...
}
Bike
拡張メソッドが Foo の型を暗黙的に呼び出すことができるのはなぜですか?