1. 类型转换
1.1 向上类型转换
- 由低层次类型转换为高层次类型称为向上类型转换。向上类型转换是自动进行的,比如把 int 型变量赋给为 long 型变量,把 long 型变量赋给 double 型变量,转换都是自动进行的。由派生类转换为基类也是向上提升,也是自动进行的,但转换后,基类的引用符不能引用派生类特有的成员。
1.2 向下类型转换
- 要想通过基类引用符 调用派生类特有的成员,必须将基类型变量强制转换为派生类变量。这种由基类向派生类转换的过程称为向下类型转换。
- 只有由基类向派生类转换时才能强制向下转换,否则程序会抛出异常,所以转换之前
我们用 is 运算符进行检查。
2. 简单的例子
2.1 is运算符
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AnimalDisplay
{
class Program
{
static void Main(string[] args)
{
double x = 12.3;
if(x is double)
Console.WriteLine("yes");
else
Console.WriteLine("no");
Pig peiqi = new Pig();
if(peiqi is Pig)
Console.WriteLine("peiqi is Pig");
if (peiqi is Mammal)
Console.WriteLine("peiqi is Mammal");
if (peiqi is Vertebrata)
Console.WriteLine("peiqi is Vertebrata");
}
}
abstract class Vertebrata
{
public abstract void Display();
}
class Mammal : Vertebrata
{
public override void Display()
{
}
}
class Pig : Mammal
{
public override void Display()
{
Console.WriteLine(@"
╭︿︿☆-╮ oοΟ
{/ . .\}
( (oo) )
︶︶︶
我是佩奇 ");
}
}
}
2.2 as运算符和强制类型转换
Mammal ma = new Pig();
Pig pig = ma as Pig;
pig.Display();
Pig pig2 = (Pig)ma;
pig.Display();
- as 运算符用执行两个引用类型之间的显式转换,它是一种安全的转换,使用前不需要用 is 运算符测试类型。在类型不兼容的时候,转换的结果是 null,而不会抛出异常。因此建议使用这种方法进行类型转换。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/eb5aee87d85e15175e5c5f88ed04a96f.png)
3. 类关系视图
- 在类视图中选中 Vertebrata 类,然后单击“察看类关系图”按钮,在代码编辑窗口会出现 Vertebrata 类的类图,右击类图,在弹出菜单中选择“显式派生类”,就会出现该类的三个派生类的图标。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/024b48c33583a597361d8398f320c6f7.png)