Вызов методов расширения интерфейса из разработчика выглядит странно в C #

Вызов метода расширения, который работает с интерфейсом, от разработчика, похоже, требует использования ключевого слова 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();
    } 
}
6
задан LukeN 15 September 2010 в 06:24
поделиться