C# 是否可以减少我在这段代码中使用的构造函数的数量?构造函数重载和转发多个类

C# 是否可以减少我在这段代码中使用的构造函数的数量?构造函数重载和转发多个类,c#,C#,今天早些时候我写了这段代码。代码的目的是实现ICommand,这样它一次只能独占运行一个方法,并为其他方法以静默方式返回 我编写它是为了与多平台用户界面一起使用,这样就不会注册多个按键 它有大量的构造函数,我不太理解这种重载。下学期我将学习设计模式,下学期我将学习面向对象编程,希望以后我的代码会更干净 我有没有办法缩短代码(减少所需的构造函数数量) 使用系统; 使用Xamarin.Forms; 使用System.Windows.Input; 使用System.Threading.Tasks; 名

今天早些时候我写了这段代码。代码的目的是实现ICommand,这样它一次只能独占运行一个方法,并为其他方法以静默方式返回

我编写它是为了与多平台用户界面一起使用,这样就不会注册多个按键

它有大量的构造函数,我不太理解这种重载。下学期我将学习设计模式,下学期我将学习面向对象编程,希望以后我的代码会更干净

我有没有办法缩短代码(减少所需的构造函数数量)

使用系统;
使用Xamarin.Forms;
使用System.Windows.Input;
使用System.Threading.Tasks;
名称空间多布詹金斯
{
公共接口IAsyncCommand:ICommand
{
任务执行同步(对象参数);
}
公共类AsyncCommand:IAsyncCommand
{
私有只读函数执行;
私有只读功能可执行;
///
///构造函数和初始值设定项
///
受保护的异步命令()
{
}
公共异步命令(Func execute、Func canExecute)
{
this.execute=execute;
this.canExecute=canExecute;
}
公共异步命令(Func execute)
{
this.execute=execute;
}
公共异步命令(Func execute、Func canExecute)
{
this.execute=\u=>execute();
this.canExecute=\u=>canExecute();
}
公共异步命令(Func execute)
{
this.execute=\u=>execute();
}
///
///执行方法
///
公共异步任务ExecuteAsync(对象参数)
{
等待执行(参数);
}
公共异步void Execute(对象参数)
{
等待执行同步(参数);
}
/// 
///CanExecute方法/事件
///
公共事件处理程序CanExecuteChanged;
公共无效更改执行()
{
var ev=CanExecuteChanged;
如果(ev!=null){
ev(此,EventArgs.Empty);
}
}
公共布尔CanExecute(对象参数)
{
返回canExecute==null | | canExecute(参数);
}
}
公共密封类AsyncCommand:AsyncCommand
{
私有只读函数执行;
私有只读功能可执行;
公共异步命令(Func execute)
{
this.execute=execute;
}
公共异步命令(Func execute、Func canExecute)
{
this.execute=execute;
this.canExecute=canExecute;
}
///
///执行方法
///
公共异步任务ExecuteAsync(T参数)
{
等待执行(参数);
}
公共异步void Execute(T参数)
{
等待执行同步(参数);
}
公共布尔CanExecute(T参数)
{
返回canExecute==null | | canExecute(参数);
}
}
公共类排他性命令:ICommand
{
受保护的ICommand背衬;
受保护的静态bool IsBusy=false;
// 
//建设者
//
#区域构造函数
公共排他性命令()
{
}
//
//同步(正常)构造函数
//
公共排他性命令(操作执行,功能执行)
{
后退=新命令(执行、canExecute);
}
公共排他性命令(执行操作)
{
后退=新命令(执行);
}
公共排他性命令(操作执行,功能执行)
{
后退=新命令(执行、canExecute);
}
公共排他性命令(执行操作)
{
后退=新命令(执行);
}
//
//异步构造函数
//
公共排他性命令(Func execute、Func canExecute)
{
Backing=新的异步命令(execute、canExecute);
}
公共排他性命令(职能执行)
{
备份=新的异步命令(执行);
}
公共排他性命令(Func execute、Func canExecute)
{
Backing=新的异步命令(execute、canExecute);
}
公共排他性命令(Func a)
{
后退=新的异步命令(a);
}
// 
//端构造函数
//
#端域构造函数
//执行
公共异步void Execute(对象参数)
{
如果(忙){
返回;
}
IsBusy=true;
var async=备份为async命令;
if(异步!=null){
wait async.ExecuteAsync(参数);
}否则{
Backing.Execute(参数);
}
IsBusy=false;
}
//
///可以执行
//
公共事件处理程序CanExecuteChanged;
公共无效更改执行()
{
var ev=CanExecuteChanged;
如果(ev!=null){
ev(此,EventArgs.Empty);
}
}
公共布尔CanExecute(对象参数)
{
返回Backing.CanExecute(参数);
}
}
}
公共密封类ExclusiveCommand:ExclusiveCommand
{
/// 
///建设者
///
#区域构造函数
公共排他性命令()
{
}
//
//同步(正常)构造函数
//
公共排他性命令(操作执行,功能执行)
{
后退=新命令(执行、canExecute);
}
酒吧
public AsyncCommand (Func<object, Task> execute, Func<object, bool> canExecute = null)
{
    this.execute = execute;
    this.canExecute = canExecute;
}