C# class 实现中接口变量的用途

Purpose of interface variable in C# class implementation

所以,开始熟悉Rider IDE。我定义了一个接口,然后设置了一个class来实现这个接口。当我使用 Roslyn fix 实现接口成员时,它生成了一些我以前没有注意到的东西,我想知道它的目的是什么。

interface IThing
{
    string GetThing();
}

然后,当我生成样板时:

class ThingClass : IThing
{
    private IThing ThingImplementation;

    public string GetThing()
    {
        throw new NotImplementedException();
    }
}

那么,IThing ThingImplementation 的实例有什么用?

Rider 提供了两个用于实现接口的快速修复。

第一个 'Implement missing members' 产生以下(预期)代码:

class ThingClass : IThing
{
    public string GetThing()
    {
        throw new System.NotImplementedException();
    }
}

第二个'Delegate implementation of 'IThing' to new field'产生原始问题中的代码:

class ThingClass : IThing
{
    private IThing thingImplementation;
    public string GetThing()
    {
        return thingImplementation.GetThing();
    }
}

当您想要更改实现时,第二个版本很有用 "on-the-fly"。可能取决于构造函数参数,或者您的用例是什么。