bool IsAssignableFrom(Type c)
功能:用来判断一个类Class1和另一个类Class2(参数)是否相同或是另一个类的父类或接口。
其实就是一个类是否是参数类的父类或接口
bool IsInstanceOfType(object o)
功能:判断对象o是否是当前类(或者子类)的实例,或者实现本接口
(即:当前类可以是o对象的类、父类、接口)
bool IsSubclassOf(Type c)
功能: 一个类是否为参数类的子类(只适用于类,不适用接口)
源代码:
Men类:
/***
*父类
*
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace chapter36Type的IsAssignableFrom_Type_c_方法
{
public class Men
{
}
}
ZhangSan类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace chapter36Type的IsAssignableFrom_Type_c_方法
{
public class ZhangSan : Men , ICanSpeak
{
}
}
Dog类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace chapter36Type的IsAssignableFrom_Type_c_方法
{
public class Dog
{
}
}
ICanSpeak接口:
/***
*接口,会说话
*
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace chapter36Type的IsAssignableFrom_Type_c_方法
{
interface ICanSpeak
{
}
}
主程序:
/***
*学习Type类更多的方法
*1.判断一个类是否是参数类的父类或接口(参数类是否实现了接口)
*2.参数类是否为一个类的实例或者实现了接口
*3.参数类是否为一个类的子类(不能是接口,只能是类)
*
*
*
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace chapter36Type的IsAssignableFrom_Type_c_方法
{
class Program
{
/// <summary>
/// 判断一个类是否是参数类的父类或接口(参数类是否实现了接口)
/// </summary>
public void Test1()
{
Type typeMen = typeof(Men);
Type typeZhangSan = typeof(ZhangSan);
Type typeDog = typeof(Dog);
Type typeICanSpeak = typeof(ICanSpeak);
Console.WriteLine(typeMen.IsAssignableFrom(typeZhangSan));
Console.WriteLine(typeMen.IsAssignableFrom(typeDog));
//接口判断
Console.WriteLine(typeICanSpeak.IsAssignableFrom(typeZhangSan));
Console.WriteLine(typeICanSpeak.IsAssignableFrom(typeDog));
}
/// <summary>
/// 一个类是否为参数类的实例
/// </summary>
public void Test2()
{
Type typeMen = typeof(Men);
Type typeICanSpeak = typeof(ICanSpeak);
ZhangSan zhangsanObj = new ZhangSan();
Men menObj = new Men();
Dog dogObj = new Dog();
Console.WriteLine(typeMen.IsInstanceOfType(menObj));
Console.WriteLine(typeMen.IsInstanceOfType(zhangsanObj));
Console.WriteLine(typeMen.IsInstanceOfType(dogObj));
Console.WriteLine("----------");
Console.WriteLine(typeICanSpeak.IsInstanceOfType(menObj));
Console.WriteLine(typeICanSpeak.IsInstanceOfType(zhangsanObj));
Console.WriteLine(typeICanSpeak.IsInstanceOfType(dogObj));
}
/// <summary>
/// 一个类是否为参数类的子类(不能是接口,只能是类)
/// </summary>
public void Test3()
{
Type typeMen = typeof(Men);
Type typeZhangSan = typeof(ZhangSan);
Type typeDog = typeof(Dog);
Console.WriteLine(typeZhangSan.IsSubclassOf(typeMen));
Console.WriteLine(typeZhangSan.IsSubclassOf(typeDog));
}
static void Main(string[] args)
{
Program obj = new Program();
//obj.Test1();
// obj.Test2();
obj.Test3();
}
}
}