如何在 C# 中为类型编写流畅的方法

How to write fluent methods for a type in C#

我理解扩展方法是一种编程风格,它让我们可以调用同一类型的不同方法,而无需创建该类型的新实例。

这个方法我在AndroidJava中用过几次。我做 Xamarin Android 应用程序开发,大多数时候当我想创建一个 AlertDialog 时,我需要一个构建器 class,它被封装在下面的相同内容中:

// Import the dependency
using AndroidX.AppCompat.App;

// Create an instance of an alert dialog
new AlertDialog.Builder(this).SetTitle("Mytitle").SetMessage("This is my message!").Show();

现在假设我在自己的自定义代码中有类似的 class。如何定义行为相同的方法?我还注意到,在你调用方法 new ...Builder.Show() 之后,编译器不允许你添加更多的扩展方法。我该如何实现?

这是我的代码:

class Builder{

    // Defining the class variables
    Context ctx;
    string title, message;

    public Builder(Context context){
         this.ctx = context;
    }

    // How do I write extension methods such as setMessage and setTitle?
    void SetTitle(string title){
        this.title = title;
    }

    void SetMessage(string message){
        this.message = message;
    }

    // Define a method for showing the builder, which when after invoked, the
    // other two methods cannot be allowed to be invoked
    void show(){
        // Display the builder
    }

}

这些不是扩展方法。你说的是流利的方法。要实现这一点,您只需要使每个方法 return 成为它调用的对象,这样您就可以在该方法之后链接其他流畅的方法。

class Builder
{
    //defining the class variables
    Context ctx;
    string title, message;

    public Builder(Context context)
    {
        this.ctx=context;
    }

    public Builder SetTitle(string title)
    {
        this.title=title;
        return this;
    }

    public Builder SetMessage(string message)
    {
        this.message=message;
        return this;
    }
    
    public void Show()
    {
    }
}