インターフェイスの明示的な実装を試しています。これは、現在のコンテキストでは無効なメソッドでインテリセンスを削除することです。/practical-applications-of-the-adaptive-interface-pattern-the-fluent-builder-context/を参考にしてください。それらが呼び出し可能でないことを証明するために、dynamic キーワードを使用できると考えました。そうすれば、少なくとも私のコードはコンパイルされるからです。コンパイルはできますが、期待どおりに動作しません。動的変数はクラス メソッドにアクセスできますが、明示的に実装されたインターフェイス メソッドにはアクセスできません。
public interface IAmInterface
{
void Explicit();
void Implicit();
}
public class Implementation : IAmInterface
{
void IAmInterface.Explicit()
{
}
public void Implicit()
{
}
public static Implementation BeginBuild()
{
return new Implementation();
}
}
そして、ここに私の主張を証明するための3つのテストがあります
[Test]
public void TestWorksAsExpected() //Pass
{
var o = Implementation.BeginBuild();
o.Implicit();
}
[Test]
public void TestDoesNotWorkWithExplicitImplementation() //Fails
{
dynamic o = Implementation.BeginBuild();
o.Explicit();
}
[Test]
public void ButWorksForImplicitImplementation() //Pass
{
dynamic o = Implementation.BeginBuild();
o.Implicit();
}
誰かがこの理由を説明するのに十分親切でしょうか? この機能が必要だった 1 つの例は、TennisGame に 3 人以上のプレーヤーを追加できないことを証明することでした。
dynamic o = TennisGame.BeginBuild().With("Player A").Versus("Player B");
o.Versus("Player C"); //Should fail. It does, but for another reason