C# 在不传递参数的情况下调用的方法
我是C#的初学者。我在我的项目中遇到了下面的代码片段。我不明白如何在不传递任何参数的情况下调用C# 在不传递参数的情况下调用的方法,c#,C#,我是C#的初学者。我在我的项目中遇到了下面的代码片段。我不明白如何在不传递任何参数的情况下调用ViewHelper.IsInView。谁能给我解释一下吗。提前谢谢 public static class ViewHelper { public static bool IsInView(IFrameworkElement element) { ---------- } } var Result = Views.Any(ViewHelper.IsInView); Any方法接受形
ViewHelper.IsInView
。谁能给我解释一下吗。提前谢谢
public static class ViewHelper
{
public static bool IsInView(IFrameworkElement element)
{
----------
}
}
var Result = Views.Any(ViewHelper.IsInView);
Any
方法接受形式为Func
的委托(指向函数的指针)。这意味着它需要一个方法来接受集合类型的元素(我猜在您的例子中是IFrameworkElement
),并返回一个bool
——这正是IsInView
方法的签名
然后,
Any
方法对Views
集合中的元素执行此委托,直到遇到返回true
的委托为止
在C#中,存在从“方法组”到委托类型的隐式转换。基本上,当你写作的时候
Views.Any(ViewHelper.IsInView)
它转化为
Views.Any(new Func<IFrameworkElement, bool>(ViewHelper.IsInView))
Views.Any(新函数(ViewHelper.IsInView))
传递给的是委托,此时不调用该方法。如果存在任何视图,则any
将使用一个或多个视图作为参数调用该委托
传递给Any
的委托是通过隐式方法组转换创建的
视图。任何
都需要类型为Func
的委托,这意味着它接受类型为iframewelement
的单个参数并返回bool
。您可以从方法中创建这样的委托,因为签名是兼容的。这是您明确执行此操作的方式:
Func谓词=
新函数(ViewHelper.IsInView);
但是,在C#2.0中,这种转换可以隐式完成,这意味着此代码完全相同:
Func<IFrameworkElement, bool> predicate = ViewHelper.IsInView;
Func谓词=ViewHelper.IsInView;
在ViewHelper中是否有其他IsInView重载?否,IsInView没有任何重载。它正在使用当前视图(包含左视图、顶视图、宽度、高度)并传递元素(也包含左视图、顶视图、宽度、高度)。框架能够通过名称获取属性值。
Func<IFrameworkElement, bool> predicate = ViewHelper.IsInView;