【问题标题】:How to call the method successively in C#? [closed]如何在C#中连续调用方法? [关闭]
【发布时间】:2017-08-15 11:08:45
【问题描述】:

我看到这段代码是用java输入的。

PersonInfo result = personInfoBuilder
            .setName("MISTAKE")
            .setAge(20)
            .setFavoriteAnimal("cat")
            .setFavoriteColor("black")
            .setName("JDM")
            .setFavoriteNumber(7)
            .build();

我在 C# 中尝试过这种方式。

public class PersonInfo
{
    public int Age { get; set; }
    public string Name { get; set; }
}

public class PersonBuilder
{
    private PersonInfo _personElement = null;

    private int age;
    private string name;

    public void SetAge(int age)
    {
        this.age = age;
    }

    public void SetName(string name)
    {
        this.name = name;
    }

    public PersonInfo GetPerson()
    {
        _personElement = _personElement ?? new PersonInfo();
        _personElement.Age = age;
        _personElement.Name = name;

        return _personElement;
    }
}

class Program
{
    static void Main(string[] args)
    {
        PersonBuilder builder = new PersonBuilder();
        builder.SetName("he")
               .SetAge(20);

    }
}

我有一个错误 [资源不可用于匿名访问。需要客户端身份验证。],

如何像 Java 一样在 C# 中连续调用方法?

【问题讨论】:

  • 你是怎么尝试的?
  • “我看到一辆摩托车偷工减料,我用我的车试了一下,但没用”
  • 创建一个类PersonInfoBuilder,初始化一个实例,让每个方法都返回这个实例,然后就可以链接了。 Build-方法返回具有指定属性的PersonInfo 实例。
  • 要搜索的关键字是fluent apifluent interface。见en.wikipedia.org/wiki/Fluent_interfacemartinfowler.com/bliki/FluentInterface.html
  • 你可以通过使用 c# 扩展方法来实现它,虽然我不明白为什么你需要像这个 java 例子那样做

标签: c#


【解决方案1】:

您建议的代码称为构建器模式。以下是我在 C# 代码中执行构建器模式的方法。

生成器类

class PersonInfo
    {
        private string name, animan, color;
        private int age, num;

        private PersonInfo() { }

        public class Builder
        {
            PersonInfo info = new PersonInfo();

            public Builder setName(string name) { info.name = name; return this; }
            public Builder setAge(int age) { info.age = age; return this; }
            public Builder setFavoriteAnimal(string animan) { info.animan = animan; return this; }
            public Builder setFavoriteColor(string color) { info.color = color; return this; }
            public Builder setFavoriteNumber(int num) { info.num = num; return this; }

            public PersonInfo build()
            {
                return info;
            }
        }
    }

这里是你如何使用它。

PersonInfo.Builder personInfoBuilder = new PersonInfo.Builder();
PersonInfo result = personInfoBuilder
                                    .setName("MISTAKE")
                                    .setAge(20)
                                    .setFavoriteAnimal("cat")
                                    .setFavoriteColor("black")
                                    .setName("JDM")
                                    .setFavoriteNumber(7)
                                    .build();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 2014-12-21
    • 2020-05-05
    相关资源
    最近更新 更多