C#基础知识---is与as
2021-07-10 20:05
标签:分享 str size 常用 类型转换 nbsp add null 一个 一、is与as对比 is检查一个对象是否兼容于指定的类型,并返回一个Boolean值:true或者fasle。 注:is操作符永远不会抛出异常 经常按如下方法使用: ClassA { .... } Object o=new Object(); Boolean b1=(o is Object); //b1为true. Boolean b2=(o is ClassA) ; b2为false. 如果对象引用是null,is操作符总是返回false,因为没有可检查的其类型的对象。 if(obj is ClassA) { ClassA a=(ClassA) obj; ... } 在这段代码中,CLR实际会检查两次对象类型。is操作符首先核实obj是否兼容于ClassA 类型,如果是,那么在if语句内部执行类型转换时,CLR再次核实obj是否引用一个ClassA。CLR的类型检查增强了安全性,但也会对性能造成一定的影响。 as与is做差不多的事情,类型显式强制转换。 as操作符的工作方式与强制类型转换一样,如果对象不能转换,结果就是null。 as常用法如下: Object obj=new Object(); ClassA a= obj as ClassA; if(a != null) //在if判断a是否为null { ... } 在这段代码中,CLR核实obj是否兼容于ClassA类型,如果是,as会返回对同一个对象的一个非null引用; 如果obj不兼容ClassA类型,as操作符会返回null。 因此,as操作符使CLR只检验一次对象的类型。 当as操作符返回null的时候,如果不进行判断直接调用,则会抛出NullReferenceException异常。 示例代码: Object obj=new Object(); //创建一个object对象. ClassA a =obj as ClassA;//将obj转型为ClassA,此时转型操作会失败,不会抛出异常,但a会被设为null. a.ToString();//访问a会抛出一个NullReferenceException异常。 二、例子 C#基础知识---is与as 标签:分享 str size 常用 类型转换 nbsp add null 一个 原文地址:https://www.cnblogs.com/3xiaolonglong/p/9675367.html 1 public class Calculator
2 {
3 public int Add(int a, int b)
4 {
5
6 int result = a + b;
7 Console.WriteLine("Base: " + result);
8 return result;
9
10 }
11 }
12 public class CalculatorSub : Calculator
13 {
14 public new int Add(int a, int b)
15 {
16 int result = 2 * a + b;
17 Console.WriteLine("Sub: " + result);
18 return result;
19
20 }
21 }
22 class Program
23 {
24 static void Main(string[] args)
25 {
26
27 Object obj1 = new Object();
28 CalculatorSub calSub = new CalculatorSub();
29
30 Calculator calBase = new Calculator();
31
32 bool a = calBase is CalculatorSub;
33 if(a)
34 {
35 ( (CalculatorSub)calBase ).Add(2, 3);
36 }
37 var b = calBase as CalculatorSub;
38 if(b != null)
39 {
40 b.Add(2, 3);
41 }
42 bool c = calSub is Calculator;
43 if (c)
44 {
45 ((Calculator)calSub).Add(2, 3);
46 }
47 var d = calSub as Calculator;
48 if(d != null)
49 {
50 d.Add(2, 3);
51 }
52 (calSub as Calculator)?.Add(2, 3);//如果calSub as Calculator为null,则不会调用Add方法
53
54 Console.ReadKey();
55 }
56
57 }
下一篇:c# 项目的导入