今日、これが可能であることに驚きましたが、これについては前に議論しなければならないのではないかと心配しています。
public interface ICanAdd
{
int Add(int x, int y);
}
// Note that MyAdder does NOT implement ICanAdd,
// but it does define an Add method like the one in ICanAdd:
public class MyAdder
{
public int Add(int x, int y)
{
return x + y;
}
}
public class Program
{
void Main()
{
var myAdder = new MyAdder();
var iCanAdd = (ICanAdd)myAdder; //compiles, but for what sake?
int sum = iCanAdd.Add(2, 2); //na, not game for it, cast had already failed
}
}
コンパイラーは、上記の状況で明示的なキャストが存在することを (正しく?) 教えてくれます。そこに構造的なタイピングを感じて興奮しましたが、実行時に失敗することはありません。では、C# がここで役立つのはいつでしょうか? そのようなキャストが機能するシナリオはありますか? それが何であれ、コンパイラは技術的にそうでmyAdder
はないことを事前に知っていると確信しています。ICanAdd