C# 流畅的接口实现

C# 流畅的接口实现,c#,fluent-interface,C#,Fluent Interface,为了使我的代码更有条理,我决定使用流畅的界面;然而,通过阅读可用的教程,我发现了许多实现这种流利性的方法,其中我发现了一个主题,他说要创建流畅的界面,我们应该使用界面,但他没有提供任何好的细节来实现这一点 下面是我如何实现fluentapi的 代码 使用代码 但是,如何让接口以更有效的方式创建Fluent API?如果您想控制调用顺序,那么使用接口实现Fluent API是很好的选择。让我们假设在您的示例中,当设置名称时,您还希望允许设置年龄。让我们假设您还需要保存这些更改,但只有在设置了年龄之

为了使我的代码更有条理,我决定使用流畅的界面;然而,通过阅读可用的教程,我发现了许多实现这种流利性的方法,其中我发现了一个主题,他说要创建流畅的
界面
,我们应该使用
界面
,但他没有提供任何好的细节来实现这一点

下面是我如何实现fluentapi的

代码 使用代码
但是,如何让接口以更有效的方式创建Fluent API?

如果您想控制调用顺序,那么使用
接口实现Fluent API是很好的选择。让我们假设在您的示例中,当设置名称时,您还希望允许设置年龄。让我们假设您还需要保存这些更改,但只有在设置了年龄之后。要实现这一点,您需要使用接口并将其用作返回类型。
请参见示例:

public interface IName
{
    IAge WithName(string name);
}

public interface IAge
{
    IPersist WithAge(int age);
}

public interface IPersist
{
    void Save();
}

public class Person : IName, IAge, IPersist
{
    public string Name { get; private set; }
    public int Age { get; private set; }

    private Person(){}

    public static IName Create()
    {
         return new Person();
    }
    public IAge WithName(string name)
    {
        Name = name;
        return this;
    }

    public IPersist WithAge(int age)
    {
        Age = age;
        return this;
    }

    public void Save()
    {
        // save changes here
    }
}

但是,如果您的具体案例需要这种方法,请仍然遵循这种方法

这种方法有什么不有效的地方?@Sergey我只是想知道如何使用那些家伙所说的接口实现如此流畅的API。。。而且我不喜欢和***一起使用,我想用姓名、年龄等。。。但在这种情况下,我不能因为财产名称而引用“那个家伙”?很高兴看到更大的问题,因为在这种情况下,你可以简单地做“新人{Name=“John”,年龄=21}”,我认为在这个博客中,他为非常简单的问题提供了非常复杂的解决方案,对不起。就是这样。。。简洁
Person person = Person.CreateNew().WithName("John").WithAge(21);
public interface IName
{
    IAge WithName(string name);
}

public interface IAge
{
    IPersist WithAge(int age);
}

public interface IPersist
{
    void Save();
}

public class Person : IName, IAge, IPersist
{
    public string Name { get; private set; }
    public int Age { get; private set; }

    private Person(){}

    public static IName Create()
    {
         return new Person();
    }
    public IAge WithName(string name)
    {
        Name = name;
        return this;
    }

    public IPersist WithAge(int age)
    {
        Age = age;
        return this;
    }

    public void Save()
    {
        // save changes here
    }
}