C# 将textbox实例传递给方法组
我创建了一个方法来循环并清除表单中的所有textbox控件C# 将textbox实例传递给方法组,c#,overloading,C#,Overloading,我创建了一个方法来循环并清除表单中的所有textbox控件 Controls.OfType<TextBox>() .ToList() .ForEach(tb => tb.Clear()); 这很好,但我认为,由于传递给任何实例方法的第一个参数始终是对实例的引用,因此我应该能够这样编写它 Controls.OfType<TextBox>() .ToList() .ForEach(TextBox.Clea
Controls.OfType<TextBox>()
.ToList()
.ForEach(tb => tb.Clear());
这很好,但我认为,由于传递给任何实例方法的第一个参数始终是对实例的引用,因此我应该能够这样编写它
Controls.OfType<TextBox>()
.ToList()
.ForEach(TextBox.Clear);
不幸的是,这实际上不起作用,我也不太明白为什么 如果TextBox.Clear是一个带有TextBox参数的静态方法,它就可以工作;但是,它是一个没有参数的实例方法,因此编译器无法自动将其转换为动作
请注意,CLR确实支持开放实例委托,您可以使用Delegate.CreateDelegate方法创建一个,但C语言不支持它
以下是如何创建将调用TextBox的开放实例委托。清除其参数:
var action = (Action<TextBox>)Delegate.CreateDelegate(
typeof(Action<TextBox>),
null,
typeof(TextBox).GetMethod("Clear"));
如果TextBox.Clear是一个带有TextBox参数的静态方法,它就可以工作;但是,它是一个没有参数的实例方法,因此编译器无法自动将其转换为动作
请注意,CLR确实支持开放实例委托,您可以使用Delegate.CreateDelegate方法创建一个,但C语言不支持它
以下是如何创建将调用TextBox的开放实例委托。清除其参数:
var action = (Action<TextBox>)Delegate.CreateDelegate(
typeof(Action<TextBox>),
null,
typeof(TextBox).GetMethod("Clear"));
此参数是隐式的,而不是显式的。Foreach需要一个带有显式参数的方法,而不是隐式参数
至于为什么C语言团队没有实现这个特性,你必须问问他们。如果他们愿意,他们当然可以设计语言来支持这一点。我们猜测他们为什么不这样做没有实际意义。这个参数是隐式的,而不是显式的。Foreach需要一个带有显式参数的方法,而不是隐式参数
至于为什么C语言团队没有实现这个特性,你必须问问他们。如果他们愿意,他们当然可以设计语言来支持这一点。我们猜测他们为什么不这样做没有任何实际意义。严格来说,这是可能的。没有。没有简单的方法来引用实例方法吗?除了我做这件事的方式。。这看起来很不干净,我们正在引用ForEach中已经存在的实例,但我们不能只写ForEachClear..@OverlyExcessive您可以创建一个调用实例方法的静态方法。这当然就是匿名方法为您所做的;如果您愿意,您可以简单地给它起个名字。@thomasleveque感谢您提供了一个详细的示例,说明我们如何使用Delegate.CreateDelegate来完成此任务。尽管在这种情况下,我认为创建一个新的委托并为此目的使用反射是过分的。然而,我学到了一些新的东西。@OverlyExcessive,是的,在这种情况下,它可能会过度;严格地说,它可以。没有。没有简单的方法来引用实例方法吗?除了我做这件事的方式。。这看起来很不干净,我们正在引用ForEach中已经存在的实例,但我们不能只写ForEachClear..@OverlyExcessive您可以创建一个调用实例方法的静态方法。这当然就是匿名方法为您所做的;如果您愿意,您可以简单地给它起个名字。@thomasleveque感谢您提供了一个详细的示例,说明我们如何使用Delegate.CreateDelegate来完成此任务。尽管在这种情况下,我认为创建一个新的委托并为此目的使用反射是过分的。然而,我学到了一些新的东西。@OverlyExcessive,是的,在这种情况下,它可能会过度@你期望实现一个C语言团队没有实现的特性。它总是发生;人们期望每种语言都有它所没有的功能。这是作为一名程序员你不得不面对的事情。@OverlyExcessive你期望实现一个C语言团队没有实现的功能。它总是发生;人们期望每种语言都有它所没有的功能。作为一名程序员,这是你不得不忍受的。