日期:2014-05-16  浏览次数:20401 次

请教C#语法: Button senderButton = sender as Button;
自从CSDN账户被黑后,第一次登录,密码没有被改,居然发现好多垃圾博客记录,唉~~~

请今天开始请教问题(好多问题),继续学习ASP.NET:
来自一个ASP.NET的培训视频,这里是语句:
Button senderButton = sender as Button;
不太理解这个AS的意思,只知道定义SENDERBUTTON作为一个BUTTON对象

完整的程序段:

 protected void TheButton_Click(object sender, EventArgs e)
    {
        Button senderButton = sender as Button;

        string yearMessage = string.Empty;
        if (senderButton.CommandName == "ThisYearCommand")
        {
            yearMessage = "this year";
        }
        else if (senderButton.CommandName == "LastYearCommand")
        {
            yearMessage = "last year";
        }

        ResultLabel.Text += string.Format("Countries visited by {0} {1}: <br/>", NameTextBox.Text, yearMessage);

        foreach (ListItem item in CountryList.Items)
        {
            if (item.Selected)
            {
                ResultLabel.Text += "* " + item.Value + "<br/>";
            }
        }
        ResultLabel.Text += "<br/>";
    }


程序的作用是两个按钮共用一个CLICK事件,根据不同按钮的COMMANDNAME属性决定执行那个判断,sender这里表示触发事件的对象,BUTTON,
问题:
为什么不直接用sender来写判断:senderButton.CommandName == "ThisYearCommand",修改为sender.CommandName ... ?
Button senderButton = sender as Button; 与Button sendButton = (Button)sender; 是不是同等的命令?
谢谢兄弟们的帮助:)
------解决方案--------------------
as(C# 参考)
类似强制转换但不会执行用户定义转换,转换失败会得到null
sender是object类型,不包含CommandName的定义,故sender.CommandName会引发编译错误
------解决方案--------------------
as字面意思是视为
Button b = sender; //这会导致错误
因为sender是object类型
as 相当于强制类型转换:
Button b = (Button)sender;
这样也可以。
但是两者的不同是,as在遇到不能转换的时候,返回null,而强制转换丢出异常,比如
int i = 1;
Button b = (Button)i; //丢出异常
Button b1 = i as Button; //不丢出异常,但是b1 = null