具有相同名称的静态方法和非静态方法如何工作?

时间:2018-12-12 14:55:06

标签: c# methods xamarin.forms static

我目前正在通过一些教程工作,而我刚刚遇到了以下示例:

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以及为什么?

0 个答案:

没有答案