黑马程序员技术交流社区

标题: wp7的is和as。。。some不明。。求解!! [打印本页]

作者: 逝去的谎言    时间: 2012-4-12 22:31
标题: wp7的is和as。。。some不明。。求解!!
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
      if(ContentPanel.Background is SolidColorBrush)//SolidColorBrush 是最基本的画笔,用于将外观应用于对象,不明。。
        {
            Color clr=(ContentPanel.Background as SolidColorBrush).Color;//这是说明background是、SolidColorBrush类型吗??
            if(e.Content is MainPage)  (e.Content as MainPage).ReturnedColor=clr;
            PhoneApplicationService.Current.State["Color"]=clr;
       }
     base.OnNavigatedFrom(e);
}
代码中用到is和as中如:ContentPanel.Background is SolidColorBrush和ContentPanel.Background as SolidColorBrush有些搞不明,理解的隐隐约约。。。求解!!!
作者: 谢栋文    时间: 2012-4-13 07:21
转以前的解答:
is 和 as 操作符是用来进行强制类型转换的

is : 检查一个对象是否兼容于其他指定的类型,并返回一个Bool值,永远不会抛出异常

        object o = new object();

        if (o is Label)
          {
              Label lb = (Label)o;

             Response.Write("类型转换成功");
          }
          else
          {
              Response.Write("类型转换失败");
          }

在上面的代码,CLR实际上会检查两次对象的类型,is操作符先核实一次,如果o兼容于Lable,那么在(Label)o时会再次核实一次,效率比较低,不建议使用


as:与强制类型转换是一样的,但是永远不会抛出异常,即如果转换不成功,会返回null

        object o = new object();

         Label lb = o as Label;

         if (lb == null)
          {
              Response.Write("类型转换失败");
          }
          else
          {
              Response.Write("类型转换成功");
          }

在上面的代码中,CLR只会进行一次类型核实,效率要高于 is

希望对你有用
作者: 逝去的谎言    时间: 2012-4-13 12:49
Thanks 受教了....




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2