在Visual Studio立即窗口中,为什么我将Equals / GetHashCode / GetType / ToString作为Button对象的IntelliSense选项?

时间:2014-10-24 14:58:33

标签: c# wpf visual-studio-2010 debugging

我在Button的Click()方法中,发件人是Button对象。我想访问所述Button的ActualWidth成员,但是当我输入" sender。"对于IntelliSense选项,我得到以下内容:

1)这些选项是什么,以及2)为什么我没有得到以下内容,这正是我所期待的?

3)如何在调试器中通过发件人访问ActualWidth?

编辑:

在立即窗口中,将发件人转换为按钮无效:

2 个答案:

答案 0 :(得分:2)

这是因为您正在访问事件中的按钮对象,并以object的形式接收该按钮对象。

private void button1_Click(object sender, EventArgs e)
                           //^^^^^^^^^^^^
{

}

这些方法(Equals,GetHashCode,ToString,GetType)可用于object类,这就是您只看到这些方法的原因。

请参阅:Object Class (C# - MSDN)

  

因为.NET Framework中的所有类都派生自Object,   Object类中定义的每个方法都可用于所有对象   在系统中。

(另见:Not everything derives from object - Eric Lippert

要将对象用作Button,您必须将其强制转换为按钮对象,如:

private void button1_Click(object sender, EventArgs e)
{
    Button button = sender as Button;
    if (button != null)
    {
        //use properties
    }
}

对于您的即时窗口:

投射时你没有使用(),像以下一样使用它:

((Button)sender).

答案 1 :(得分:1)

您必须将sender投射到Button类型。当它进来时它是object类型。