将一个对象转换为它的基类型
class Program
{
static void Main(string[] args)
{
Person p = new Student();
Console.WriteLine(p.GetType()); // Student
// 不过也是多余的转换
Person p2 = (Person)new Student();
Console.WriteLine(p2.GetType()); // Student
Console.ReadKey();
}
}
public class Person
{
public int Age { get; set; }
}
public class Student : Person
{
public int StuNum { get; set; }
}
但是当我们访问p/p2的成员时,他只有一个Age成员,没有StuNum。
将一个对象转换为它的派生类型
这种情况必须显示转换,因为这种转换可能会在运行时失败
Student stu = new Person(); // 不能通过编译
Student stu = (Student)new Person(); // 不能把父类类型转换成子类对象
【里氏转换】
1)、子类可以赋值给父类(需要一个父类类型时,给一个子类类型的对象是可以的)
2)、如果父类中装的是子类对象,那么可以将这个父类强转为这个子类对象。
3)、不能把父类类型转换成子类对象
Person p3 = new Student();
Student stu2 = (Student)p3;
Console.WriteLine(stu2.GetType());
基元类型的类型转换
逻辑上有从属关系C#可以完成转换。例如int可以隐式转换为long,较大集合转换为较小集合时C#要求显示转换,例如long转换为int。