Is 和 As 之惑

前言

    之前看过Anytao的《你必须知道的.NET》,其中有一章专门介绍Is 和 As 之惑的文章,当时感觉比较简单,就过去了。然而由上一篇博文《选取页面全部TextBox,并赋值的两种方法——从服务器端和JS实现》中再次用到了 Is 关键字(见下代码),然而却感觉印象模糊,所以在此复习之。

protected   void  Button1_Click( object  sender, EventArgs e)
    {
        
// 选取form1中的全部控件,为简略,这里不能实现递归,只是实现单层选取
         foreach  (Control ct  in   this .FindControl ( " form1 " ).Controls )
        {
            
if  (ct  is  TextBox )
                ((TextBox)ct).Text 
=   string .Empty;
        }
        
    }


    对于它们的用法,印象只停留在之前在项目《员工假勤管理系统中》,为了保存单个用户的信息,采用的Session 存储和 用As 提取的模式。

 

as 和 is 解析:

     as 和is 都是在C#安全类型下的转换形式。其规则如下:

  • is 用于转换时,首先作用为Boolean型判断,然后才能进行转换。这里的is ,同在C++和C#中经常提到的,在继承层次时的 “对象2 对象1”的说法相同; 
  • as 用于转换时,当可以有效转换时,通过一次转换即可。如果无法有效转换,则其为null 值;

注:

    as 只能用于引用类型的转换。同时is 和 as 都不会抛异常(因为它们的特性)。见下例:

//  Description: 演示类在继承后,所采用is 和as 的操作

//  CopyRight:  http://www.cnblogs.com/yangmingming

//  Notes: 采用最为简单的类继承关系

namespace  IsVSAsDemo
{
    
// Animal基类
     public   class  Animal
    {
        
private   string  name;
        
public   string  Name
        {
            
get  {  return  name; }
            
set  { name  =  value; }
        }
        
public   virtual    void  ShowAnimal()
        {
            Console.WriteLine(
" I am an animal. " );
        }
    }
    
// Animal的派生类
     public   class  Bird : Animal
    {
        
private   string  type;
        
public   string  Type
        {
            
get  {  return  type; }
            
set  { type  =  value; }
        }
        
public   override   void  ShowAnimal()
        {
            Console.WriteLine(
" I am animal and {0} " , Type);
        }
    }
    
// 主程序
     class  Program
    {
        
static   void  Main( string [] args)
        {
            Bird b 
=   new  Bird();
            b.Name 
=   " niao " ;
            b.Type 
=   " bird " ;
            Animal animal 
=  b;

//  is 综合应用;
            
// 应用is 1:
             if  (animal  is  Bird)
                Console.WriteLine(
" This animal is Bird " );
            
else
                Console.WriteLine(
" This animal is not Bird " );

            
// 应用is 2:
             if  (b  is  Bird)
                Console.WriteLine(
" bird is Bird " );
            
else
                Console.WriteLine(
" bird is not Bird " );

            
// 应用is 3:
             if  (b  is  Animal)
                Console.WriteLine(
" bird is Animal " );
            
else
                Console.WriteLine(
" bird is not Animal " );

// as 的综合应用
            
//  as 的应用1:
            Bird acceptBird  =  animal  as  Bird;
            acceptBird.ShowAnimal();

            
//  as 的应用2 :
            Animal a  =   new  Animal();
            Bird acceptBird2 
=  a  as  Bird;
            
if  (acceptBird2  ==   null )
                Console.WriteLine(
" We cannot accept Bird By as operator! " ); // 当无法有效转换时,仍为null;
        }
    }
}


 调试结果为:

 

 

由调试结果可对is 和as 的转换方式及结果进行了代码验证。

 

  综述之,由上对is 和 as 的相关分析,以期进一步厘清is 和 as 这两种较常用的转换运算符的了解和学习。在以后的应用中,有所知道。呵呵~  

 

 

 

转载于:https://www.cnblogs.com/yangmingming/archive/2010/03/16/1687111.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值