c#中的as起到什么用?

不明白C#中的as····
求个热心人能给我讲一讲as是怎么用的,尽量别用书面语言讲哈,很不好懂,多举例子吧~谢谢大家了!
多举例子 谢谢大家 要不很不好懂。。。
比如定义个类:人
创建个对象:姚明
人 姚明 = new 人();
这样的 谢谢哈!

C#中使用as进行类型转换
在程序中,进行类型转换是常见的事。那么在C#中支持以前语言的类型转换方法,即用类型名进行强行转换,例如:

object objTest = new NewType();

NewType newValue = (NewType)objTest;

但是这样转换,有个严重的问题,就是在把objTest强转换成NewType类型对象的时候,这个过程是不安全的,因此需要用try-catch语句来进行保护。这样一来,比较安全的代码方式应该如下所示。

object objTest = new NewType();

NewType newValue = null;

try

{

newValue = (NewType)objTest;

}

catch( Exception err )

{

MessageBox.Show( err.Message );

}

但是如上的写法在C#中已经属于过时的写法,而且也属于比较低效的写法。在C#中比较高效而且安全的写法,应该用as操作符,那么完成如上类似功能的正确代码应该如下。

object objTest = new NewType();

NewType newValue = objTest as NewType;

那么很明显,如上的写法首先看起来很简便,至少代码数量和强转方式一样。至于安全性,对于as操作符来说,它不会做过的转换操作,当需要转换对象的类型属于转换目标类型或者转换目标类型的派生类型的时候,那么此转换操作才能成功,而且并不产生新的对象。因此用as来进行类型转换使安全的。为什么用as操作符进行类型转换的效率要高于老式的类型转换的,因为用as操作符进行转换就如前面所说的,首先判断当前对象的类型,当类型满足要求后才进行转换。而传统的类型转换方式,是用当前对象直接去转换,而且为了保护转换成功,要加上try-catch,这就决定了它的效率不会高于as操作符的效率。

要注意的时候,不管用传统方式,还是用as操作符进行类型转换之后,在使用之前,需要进行判断转换是否成功,如下:

if( newValue!= null )

{

//Work with the object named "newValue"

}

但是,使用as操作符有如下几点限制。

第一个就是,不用在类型之间进行类型转化,即如下编写就会出现编译错误。

NewType newValue = new NewType();

NewType1 newValue = newValue as NewType1;

第二个就是,不能应用在值类型数据,即不能如下写(也会出现编译错误)。

object objTest = 11;

int nValue = objTest as int;

对于第一点所提的,可以用传统的类型转换方式来完成,但是光用如下的方式,是不能正确完成。

NewTypeOne newTestOne = new NewTypeOne();

NewTypeTwo newTestTwo = (NewTypeTwo)newTestOne;

但是光如上写是不能完成的,要想使如上的操作能正确完成,在原有类型中增加类型转换操作符函数,即需要完成类似如下的代码。

public class NewTypeOne

{

public static explicit operator NewTypeTwo( NewTypeOne objTest )

{

//Convert object into new type

}

}

对于第二点所提的,在C#中可以使用is操作符,再加上老式的类型转换操作,就可以安全完成转换,那么要完成如上操作,正确的写法如下。

object objTest = 11;

if( objTest is int )

{

int nValue = (int)objTest;

}

除了如上两点限制外,在用as操作符来进行类型转换的时候,有个细微的问题。在前面所说的,用as来进行类型转换的时候,所要转换的对象类型必须是目标类型或者转换目标类型的派生类型,那么这样就有个问题,即用as操作符来进行类型转换的时候无法转换成正确的类型,也就是说本来应该转换成子类型,却转换成了父类型。但是我并不认为这是个严重问题,因为在用as操作符来进行类型转换的时候,如何选择目标类型在编码的时候已经很明确了,即用父类型作为目标类型,那么类型转换的目的就是转换成父类型对象进行操作;反之亦然。

在C#中已经提供了一个很好的类型转换方式,那么在进行类型转换的时候,可以按照如下的方式进行选择。
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-10-30
as是用于检查在兼容的引用类型之间执行某些类型的转换,注意只有引用类型才可以,如果兼容as会返回对同一个对象的一个非null的引用,否则返回一个null。
简单的说就是,如果一个对象可以被转换成as后面的那个类型,那么就会返回这个类型的对象,否则就会得到一个null。
需要注意的是只有引用类型才可以用as,比如:
object
a
=
11;
int
b
=
a
as
int;
//这样的用法是错误的,因为int类型是值引用
第2个回答  2008-12-22
19.C#中的is操作符与Java中的instanceof操作符一样,两者都可以用来测试某个对象的实例是否属于特定的类型。在Java中没有与C#中的as操作符等价的操作符。as操作符与is操作符非常相似,但它更富有“进取心”:如果类型正确的话,as操作符会尝试把被测试的对象引用转换成目标类型;否则,它把变量引用设置成null。
第3个回答  推荐于2018-03-28
首先,BS复制的
as是用来类型转换的
比如:两个类:A和B
B b = new B();
//不用as,进行强制转换,如果类型不匹配,会引发转换异常
A a = (A) b;
//使用as,类型不匹配,不会引发异常,会返回一个null,此时 a = null
A a = b as A;本回答被提问者和网友采纳
第4个回答  2020-07-13
父类引用指向子类对象cir是Circle类型,cir2也是Circle类型。
其中shp=cir这不是赋值这是一个指向操作。也就c++中所说的指针。
你想一下shp可以等于null为什么就不能等于cir呢?

C#中as 运算符的作用是什么?
as运算符用于执行引用类型的显式类型转换。 如果要转换的类型与指定类型兼容,转换就会成功;如果类型不兼容,则返回null。表达式as 类型 as 运算符类似于类型转换,所不同的是,当转换失败时,as 运算符将返回null,而不是引发异常。as的规则如下:�6�1 检查对象类型的兼容性,并返...

c#中的"as"是什么意思?
as进行类型转换。转型失败返回null,而不是抛出异常。\\x0d\\x0a比如你举例的Bb=aasB;就相当于Bb=(B)a;但是如果转型失败后一种就会抛出异常,而前一种b==null;\\x0d\\x0a\\x0d\\x0a如果B是A的基类,那么最后的b.getvalue()实际调用的是a的方法。\\x0d\\x0a如果B不是A的基类,那么b为null...

c#中as的用法、意思?
as 运算符用于在兼容的引用类型之间执行某些类型的转换。说明白了,就是把基类类型转换成派生类类型 比如Winform的ListBox的每一项都是object类型,将一个string丢进去以后,下次再取出的时候是一个object。这时候,想还原原来的字符串,就得对这个object做as string操作。

在C#中,关于is和as的用法
在c#中is用于类型判断,因为B是A的子类,所以表达式 b is A 的值为 true ;as用于类型转换

c#中的as到底是什么意思啊
as 就是转换 一般是用在a继承b,或者a实现接口b B b= a as B;b.getvalue()\/\/这到底是实现A的方法还是B的?这里实现的还是A的方法。这是一个典型的多态用法 程序中有一句话,编译看左边,运行看右边 右边a 原来是A类型。那么b.getvalue()就是A类型的getvalue --- 如果类A里有x,y属性 ...

在c#中,is和as的说法正确的是
选择c 在c#中is用于类型判断,因为B是A的子类,所以表达式 b is A 的值为 true ;as用于类型转换

C# is 与 as
if (obj is string){ } 如果所提供的表达式非空,并且所提供的对象可以强制转换为所提供的类型而不会导致引发异常,则is 表达式的计算结果将是 true;注意,is 运算符只考虑引用转换、装箱转换和取消装箱转换。不考虑其他转换,如用户定义的转换。2:as 用于在兼容的引用类型之间执行转换,类似于强制转换...

c#is和as的区别
AS是引用类型类型的转换或者装箱转换,不能用与值类型的转换。如果是值类型只能结合is来强制转换。IS只是做类型兼容判断,并不执行真正的类型转换。返回true或false,不会返回null,对象为null也会返回false。AS模式的效率要比IS模式的高,因为借助IS进行类型转换,需要执行两次类型兼容检查。而AS只需要做...

在C#中 is 和 as 关键字有什么作用?如何正确的使用这两个关键字呢?
is是判断类型,,,as是转换类型比如判断a是不是b 。。。 if(a is b) 是的返回true,,否则返回false把a类型转换成b类型 a as b ...这样转换比较安全,,应该转换失败不会出现异常,而是返回NULL

C#中is、as和base 关键字的各有什么作用如题 谢谢了
stu=Student[i] as Student; Console.WriteLine(stu.Name);} base在继承中用于表示父类,可以用于访问父类的成员 如:调用父类的属性、方法、构造函数 在子类构造函数后面添加“:base(参数变量名)”用于指定该子类的构造函数调用哪个父类的构造函数 我也很菜的 只知道这么多 希望能帮到你 ...

相似回答