学习C#基础时的疑问,强制类型转换和as转换到底什么区别和联系。
首先,类型转换分为两大类:
1.依靠转换操作符完成类型之间的转换;
2.类型存在继承关系。
我们看一下代码案例:
class Program
{
static void Main(string[] args)
{
Person p = new Person();
p.Name = "Person";
Student s = new Student();
s.Name = "Student";
s.School = "Middle School";
Worker w = new Worker();
w.Name = "Worker";
w.Company = "ABC Company";
//as
p = s as Person;
Console.WriteLine(p.Name);
//is
if (w is Person)
{
p = w as Person;
Console.WriteLine(p.Name);
}
//强制类型转换
s = (Student)w;
Console.WriteLine(s.Name);
Console.Read();
}
}
class Person
{
public string Name { get; set; }
}
class Student : Person
{
public string School { get; set; }
public static explicit operator Student(Worker w)
{
Student s = new Student();
s.School = w.Company;
s.Name = w.Name;
return s;
}
}
class Worker : Person
{
public string Company { get; set; }
public static explicit operator Worker(Student s)
{
Worker w = new Worker();
w.Company = s.School;
w.Name = s.Name;
return w;
}
}
通过上面代码,我们可以得出三个结论:
1.没有继承关系时,依靠转换符进行转换;
2.有继承关系时,用as进行转换;
3.is进行继承关系容错。