interface X を明示的実装した構造体を T where X で受け取ったときのメソッド呼び出しがどうなるか?

昔(id:ladybug:20040812)書きましたが、暗黙的実装を行った構造体が特殊化されたインスタンス化によってインライン展開&最適化されることは、仕様でも実装でもわかっています。
int Add(int, int) なんてメソッドを int added = structure.Add(1, 2) とかしたりしたら、MOV ECX, 3 とかに最適化されてしまいます。
では、明示的実装されたメソッドはどのように解決されるのでしょうか?
実際に試してみると・・・見事に展開&最適化され暗黙的実装と同じ結果になりました。なんと、ボックス化も発生せず!
前の日記の最後のようなコードが T where ICanAdd による自動的なメソッド解決であれば 0, 1, 2 を出力します、いいのかそれで?
# とりあえず、[ Unit プロパティでパフォーマンスが落ちることはない ] ということで

クラスの場合、クラスは常に T に対する実装を object 型で共有するので、明示的であるか暗黙的であるかで挙動に差異はありません。
逆に言えば、常に明示的実装であると扱われています。
しかし、構文上は public method のように制約に記述したクラスやインターフェスのメソッドを呼び出したりすることができます。

ただしメソッド呼び出しにおいて、他人の日記のコメント*1でちょっと書いてますが、C# 2.0 では T を引数とすることで型に依存するオーバーロードされたメソッド解決を実行しないことが、明確に仕様として定義されているようです。*2
これを回避するために、構造体からインターフェス型を取り出すようなコードを記載してしまうと、当然ながらボックス化が発生してしまいます。

*1:id:akiramei:20040821

*2:個人的には制約によって親子関係を指定したとき...せめて unifier(?) ですべての祖である object だけ特別扱いし object と T のオーバーロード解決だけはやってほしいところです