-
关于as
利用as操作符进行类型转换,首先判断当前对象的类型,当对象的类型能够满足要求后,才进行转换,否则会报错。
而要求就是:需要转化的对象的类型属于转换目标类型,或者目标类型的派生类型。
所以as具有一定的安全性。
using System;
namespace TypeTransform
{
class NewType
{
}
class SonType:NewType
{
}
class HelloWorld
{
static void Main(string[] args)
{
NewType obj1 = new SonType();
SonType obj2 = obj1 as SonType;
Console.WriteLine(obj2.GetType());
Console.ReadKey();
}
}
}
需要注意的是,as不能用于不同类型之间转换。
也不能用于值类型数据。
- 如果想要值类型数据,可以在C#中使用is操作符判断,再显式转换。
static void Main(string[] args)
{
int value1 = default(int);
object obj3 = 11;
if(obj3 is int)
{
value1 = (int) obj3;
}
Console.WriteLine(value1);
Console.ReadKey();
}
- 如果想在不同类型之间转换
可使用implicit(隐式)和explicit(显示)定义的类型转换运算符。
注意,因为隐式转换不需要程序员强制转换,必须小心不能丢失信息。
using System;
namespace TypeTransform
{
class NewType
{
public NewType(SonType f){p = f;}
public SonType p{get;}
public static implicit operator NewType(SonType f)
{
Console.WriteLine("SonType转换为NewType");
return new NewType(f);
}
public static explicit operator SonType(NewType f)
{
Console.WriteLine("NewType转换为SonType");
return new SonType();
}
}
class SonType
{
}
class HelloWorld
{
static void Main(string[] args)
{
SonType a = new SonType();
NewType b = new NewType(a);
NewType c = a;
SonType d = (SonType)b;
Console.WriteLine(c.GetType()+ " "+ d.GetType());
Console.ReadKey();
}
}
}
网友评论