如何在 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()
{
}
}
我理解扩展方法是一种编程风格,它让我们可以调用同一类型的不同方法,而无需创建该类型的新实例。
这个方法我在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()
{
}
}