------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
Chinese ch = new Chinese();
// 1、 当需要一个父类类型对象的时候,可以给一个子类类型的对象
//将ch传递给Person类型,发生了隐式类型转换
Do(ch);
//Person p = new Person();
//当需要一个子类类型对象,给一个父类类型对象是不可以的
//Do1(p); //报错
//1 就相当于需要一个double类型的,但是却给了个int类型的值,这里就发生了隐式转换
int n = 10;
double d = n; //隐式类型转换
需要父类类型
需要子类类型
static void Do(Person p)
{
Console.WriteLine(p.Name);
}
static void Do1(Chinese chi)
{
Console.WriteLine(chi.Name);
}
}
public class Person
{
public string Name
{
get;
set;
}
}
public class Chinese : Person
{
public string ClassId
{
get;
set;
}
}
public class JangXi : Chinese
{
}
public class NanChangRen : JangXi
{
}
Chinese c = new Chinese();
c.ClassId = "1111";
//把子类类型赋值给父类类型,发生了隐式类型转换
Person p = c;
//把父类类型变量赋值给子类类型,需要显示类型转换。前提是如果这个父类类型变量p中,指向的是一个子类对象,那么可以显示类型转换,如果p指向的不是chinese,则显式转换会报错,转换失败。
Chinese cn1 = (Chinese)p;
Console.WriteLine(cn1.ClassId);
//----------判断类型--------------
//为了避免显示类型转换出错,可以先用if判断
Person p = new Chinese();
//假如new的这个类型为Person,那么p不属于chinese类型。所以则是输出类型不匹配
Person p = new Person();
p.Name = "张三";
//判断一个对象是否属于某个类型
//这里进行一次类型验证
if (p is Chinese)
{
Chinese ch = (Chinese)p;//再在这里做一次验证,并转换
Console.WriteLine(ch.Name);
}
else
{
Console.WriteLine("类型不匹配");
}
//--------类型转换as---------
Person p = new Person();
//as只进行一次类型转换
Chinese ch = p as Chinese;
Console.WriteLine(ch.ClassId);
Console.ReadKey();
#region 验证某个对象是否为某个类型
NanChangRen ncr = new NanChangRen();
//GetType是通过反射实现的
Console.WriteLine(ncr.GetType().ToString());
Console.WriteLine(ncr.GetType().BaseType.ToString());
Console.WriteLine(ncr.GetType().BaseType.BaseType.ToString());
Console.WriteLine(ncr.GetType().BaseType.BaseType.BaseType.ToString());
Console.WriteLine(ncr.GetType().BaseType.BaseType.BaseType.BaseType.ToString());
//object是没有父类的,所以它的父类是null
Console.WriteLine(ncr.GetType().BaseType.BaseType.BaseType.BaseType.BaseType.ToString());
Console.ReadKey();
#endregion
------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------