菜单

C# 之类型转变

2019年5月12日 - 金沙编程资讯

四、IS与AS:

在意:2者成效一样,可是效能差异非常的大,使用is会检查四遍对象的品类,二次是核查,二遍是强制转变。使用as只进行了1次对象类型的反省。检核对象的门类,是个成本财富的操作,首先要认清目的的其实类型,然后必须遍历承继树结构(等级次序结构),去与各类基类查对。

显式转变:显式转换则相反,必要钦点转变类型;如:

对此代表数值的主干数据类型来说,数值范围小的数据类型转换来数值范围大的数据类型能够拓展隐式转变,而扭曲则必须举办展现转变。就像上边的多少个例证同样。 对于类类型来讲,子类转变到父类可以展开隐式转变,而扭曲则必须开始展览显式调换,例如:string
str1 = “abc”;object obj = str一;  //子类调换来父类,隐式调换string str二 =
(string)obj; 
//父类调换到子类,显式调换 假使四个类之间从未承继关系,则不能够拓展隐式调换或显式调换,此时必须在被改变的类中定义二个隐式调换方法或显式调换方法。

  强制类型转变,有非常大可能率会促成极度。is与as就是为着化解那1题目,is与as永久不会抛出十一分。

贰、显式转变与隐式调换:

隐式调换:隐式转变无需在代码中钦命转变类型;如:

 

值类型和引用类型讲明请看另1篇

装箱:将值类型调换来引用类型。

一、常用类型概述:

三、装箱与拆箱:

四、使用is和as能够替代强制类型调换,分别如下: 

a、IS只是做类型兼容判断,并不执行真正的类型转换。返回true或false,不会返回null,对象为null也会返回false。is操作符永远不会抛出异常。
  if(a is Dog)
  {
    Dog d = (Dog)a;
    ...
      boolean b1=(obj is Object); //b1 为true
  }

b、AS操作符类似于强制转换,但又有区别,当对象为null时,不会抛异常而是会返回null。
  Dog d = a as Dog;
  if(d!=null)
  {
    ...
      Class1 b = o as Class1; // b = null
 }

显式转变要求是同类型的,就是说二种数据类型必须合作,隐式转变是进步转型(杰出是子类转父类),而挟持类型转换则是向下转型(特别是父类转子类),就类似Double型的可以包罗int型同样。而挟持转变能够是或不是一律种类型,(就像class一与class2同等第的类同样),两都开始展览内容上的辨析。Convert.ToInt3二与int.Parse都以强制转变,int.Parse是更改String为int(这种状态多多,恐怕开始展览了些优化,也说不定只是为着便利,管理逻辑一样),
而Convert.ToInt3贰是退换承继自Object的目的为int的(1捌种重载).
比方1个object对象,你想把它调换为int,用int.Parse就不得以,要用Convert.ToInt32。

1、使用境况:

int intNumber = 10; 
double doubleNumber = intNumber;  
long a = intNumber; //隐
double doubleNumber1 = 10.1;  
int intNumber1 = (int)doubleNumber1; //显

2、is推断一个对象是还是不是相配于钦定的项目,思量里氏代换。Dog是Animal,而Animal不是Dog。

bool -> System.Boolean
(布尔型,其值为 true 或者 false)
char -> System.Char (字符型,占有多个字节,表示 一 个 Unicode 字符)
byte -> System.Byte (字节型,占 1 字节,表示 8 位正整数,范围 0 ~
255)
sbyte -> System.SByte (带符号字节型,占 1 字节,表示 8 位整数,范围
-12八 ~ 127)
ushort -> System.UInt16 (无符号短整型,占 二 字节,表示 14个人正整数,范围 0 ~ 65,535)
uint -> System.UInt3贰 (无符号整型,占 四 字节,表示 32 位正整数,范围
0 ~ 4,294,967,295)
ulong -> System.UInt6四 (无符号长整型,占 8 字节,表示 陆十几人正整数,范围 0 ~ 大约 10 的 20 次方)
short -> System.Int16 (短整型,占 2 字节,表示 16 位整数,范围
-32,768 ~ 32,767)
int -> System.Int32 (整型,占 4 字节,表示 32 位整数,范围
-2,147,483,648 到 2,147,483,647)
long -> System.Int6四 (长整型,占 8 字节,表示 6四 位整数,范围大致-(10 的 1玖) 次方 到 十 的 1九 次方)
float -> System.Single (单精度浮点型,占 四 个字节)
double -> System.Double (双精度浮点型,占 捌 个字节)

拆箱:将引用类型调换为值类型。

3、as
与强制类型转变一样,差别是应用as是平安的。使用as要是转变战败,重返Null,不会抛出特别。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图