我目前正在通过一些教程工作,而我刚刚遇到了以下示例:
using System;
using Xamarin.Forms;
namespace Xamarin.FormsBook.Toolkit
{
public class AltLabel : Label
{
public static readonly BindableProperty PointSizeProperty = BindableProperty.Create("PointSize",
typeof(double),
typeof(AltLabel),
8.0,
propertyChanged: OnPointSizeChanged);
public AltLabel()
{
SetLabelFontSize((double)PointSizeProperty.DefaultValue);
}
public double PointSize
{
set { SetValue(PointSizeProperty, value); }
get { return (double)GetValue(PointSizeProperty); }
}
static void OnPointSizeChanged(BindableObject bindable, object oldValue, object newValue)
{
((AltLabel)bindable).OnPointSizeChanged((double)oldValue, (double)newValue);
}
void OnPointSizeChanged(double oldValue, double newValue)
{
SetLabelFontSize(newValue);
}
void SetLabelFontSize(double pointSize)
{
FontSize = 160 * pointSize / 72;
}
}
}
如您所见,有两个OnPointSizeChanged
。我现在所做的是,通过向其添加第三个参数来更改void OnPointSizeChanged
,使其看起来与static void OnPointSizeChanged
完全一样。现在两种方法看起来都一样。唯一的区别是,一个是static void
方法,另一个是void
方法。
为什么这样的事情起作用?假设发生了propertyChanged事件。它将使用哪个OnPointSizeChanged以及为什么?