前言:
之前看过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 这两种较常用的转换运算符的了解和学习。在以后的应用中,有所知道。呵呵~