标签:style blog http color os 使用 ar div sp
首先来说说As是干什么的:
代码:
void OnMouseEnter(object sender, MouseEventArgs e)
{
Ellipse ell = sender as Ellipse; //就它了
ell.Fill = new SolidColorBrush(Colors.Yellow);
}
Ellipse ell = sender as Ellipse;
sender是事件源,这句的意思是把引发该事件的事件源转成Ellipse类型as是用来强制类型转换的,用as转换的好处是:转换失败不会出现异常,而是返回NULL,这样就比一般的转换安全
代码://鼠标离开后恢复默认
private void OnMouseLeaveSizeLabel(object sender, EventArgs e)
{
Label label = sender as Label;
在这里使用到了sender传入的事件源(事件源就是当前按钮的属性,是lable,button还是testbox,在这里就是lable),现在这个sender是object类型的,所以要对这个事件源进行转换,如果不操作,如this.close(),就不用转换这个sender
if (label.Name == minisize.Name)
minisize.Image = Resources.Min;
else if (label.Name == maxsize.Name)
{
if (maxstate)
maxsize.Image = Resources.Restore;
else
maxsize.Image = Resources.Max;
}
else if (label.Name == closebutton.Name)
closebutton.Image = Resources.Close;
}
再说说IS:
is就是处于对类型的判断。返回true和false。如果一个对象是某个类型或是其父类型的话就返回为true,否则的话就会返回为false。另外is操作符永远不会抛出异常。
System.Boolean b1 = (o is System.Object);//b1 为true
System.Boolean b2 = (o is Employee);//b2为false
现在说说As和Is的区别:
摘自CLR via C#第三版第四章
在c#中is可以用来判断一个对象是否兼容给定的类型,如果是返回true,否则返回false。
同时is是永不会抛出异常的。如果对象引用是null,is操作符总是返回false。
Object o = new Object();
Boolean b1 = (o is Object); //返回true
Boolean b1 = (o is Employee); //返回false
一般is操作符的使用方式如下
//先进行判断
if( o is Employee){
Employee e = (Employee) o;
.....
}
在该过程中CLR实际会检查两次对象类型,首先is操作符检查o是否兼容Employee,如果是在if内部
CLR会再次核实o是否引用一个Employee。这会对性能造成一定影响。这是因为CLR首先必须判断o引用的
对象实际的类型,然后遍历继承层次结构,用每个基类型去核对。
C#提供了as操作符来简化这种代码的写法,来提高性能。
Employee e = o as Employee;
if(e !==null){
}
如果o兼容于Employee,as会返回同一个对象的非null引用。如果不兼容,会返回null。as操作符CLR只会校验一次对象的类型。
同时它也永远不会抛出异常,所以要检查生成的引用是否为null。
标签:style blog http color os 使用 ar div sp
原文地址:http://www.cnblogs.com/jingsheng99/p/3992470.html