実装者からインターフェイスで機能する拡張メソッドを呼び出すには、thisキーワードを使用する必要があるようです。これは奇妙に思えます。
誰かが理由を知っていますか?
インターフェイスの共有実装を取得する簡単な方法はありますか?
多重継承/ミックスインの撤回に苦しんでいるので、これは私を苛立たせます。
おもちゃの例:
public interface ITest
{
List<string> TestList { get; }
}
public static class TestExtensions
{
private const string Old = "Old";
private const string New = "New";
public static void ManipulateTestList(this ITest test)
{
for (int i = 0; i < test.TestList.Count; i++)
{
test.TestList[i] = test.TestList[i].Replace(Old, New);
}
}
}
public class Tester : ITest
{
private List<string> testList = new List<string>();
public List<string> TestList
{
get { return testList; }
}
public Tester()
{
testList.Add("OldOne");
testList.Add("OldTwo");
// Doesn't work
// ManipulateTestList();
// Works
this.ManipulateTestList();
}
}