Luk*_*keN 6 c# extension-methods multiple-inheritance mixins
调用在实现者的接口上工作的扩展方法似乎需要使用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();
    } 
}
我直接向语言团队询问了这个确切的问题。我手头没有电子邮件,但基本上答案(来自 Mads,IIRC)是:
就我个人而言,我希望它能够始终如一地工作 - 第一个似乎不是一个大问题(但是,我不编写编译器),并且都没有考虑到通常this.*是可选的事情(这可能会影响这样的事实)作为本地代码风格指南,即“你应该使用this.”)。
| 归档时间: | 
 | 
| 查看次数: | 157 次 | 
| 最近记录: |