c#反射Type型別的一些方法介紹
=====TestLib.dll檔案內容========
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TestLib
{
public class Class1
{
private int _age;
public int Age
{
get { return _age; }
set { _age = value; }
}
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
public void SayHi()
{
Console.WriteLine("大家好!");
}
public void AAA()
{
MyClass mc = new MyClass();
mc.BBB();
}
}
public interface IFlyable
{
void Fly();
}
public delegate void MyDelegate();
public enum Good
{
高,
富,
帥
}
internal class MyClass
{
internal void BBB()
{
Console.WriteLine("能看到嗎》");
}
}
public class Person
{
public string Name
{
get;
set;
}
public int Age
{
get;
set;
}
public string Email
{
get;
set;
}
}
public class Chinese : Person, IZiWoXiuFu
{
//戶口
public string HuKouSuoZaiDi
{
get;
set;
}
#region IZiWoXiuFu 成員
public void XiuFu()
{
Console.WriteLine("以毒攻毒,配平了。");
}
#endregion
}
public interface IZiWoXiuFu
{
void XiuFu();
}
public abstract class MyAbsClass
{
public abstract void SayHello();
}
public static class MyStaticClass
{
}
}
=====控制檯program.cs檔案內容========
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace _10Type型別的一些方法介紹
{
class Program
{
static void Main(string[] args)
{
//1.動態載入程式集
Assembly asm = Assembly.LoadFile(@"C:\testlib.dll");
//2.1獲取Chinese型別的Type
Type typChinese = asm.GetType("TestLib.Chinese");
//2.2獲取Person型別的Type
Type typPerson = asm.GetType("TestLib.Person");
//2.3獲取介面型別的Type
Type typIXiuFu = asm.GetType("TestLib.IZiWoXiuFu");
//2.4獲取抽象類MyAbsClass的Type
Type typMyAbsClass = asm.GetType("TestLib.MyAbsClass");
//2.5獲取靜態類MyStaticClass的Type
Type typMyStaticClass = asm.GetType("TestLib.MyStaticClass");
#region IsAssignableFrom
//3.驗證一下Person型別是不是Chinese型別的父類。
//驗證是不是可以把typChinese型別的物件賦值給typPerson型別。
//bool b = typPerson.IsAssignableFrom(typChinese);
//Console.WriteLine(b);//true,因為Chinese繼承了Person
////判斷是否可以將typChinese的物件賦值給typIXiuFu型別
//bool b = typIXiuFu.IsAssignableFrom(typChinese);
//Console.WriteLine(b);
#endregion
#region IsInstanceOfType
////建立了一個typChinese型別的物件obj
//object obj = Activator.CreateInstance(typChinese);
//////驗證obj是不是typChinese型別的物件
////bool b = typChinese.IsInstanceOfType(obj);
////Console.WriteLine(b);//true
//////驗證obj是不是typPerson型別的物件
////bool b = typPerson.IsInstanceOfType(obj);
////Console.WriteLine(b);//true
//Console.ReadKey();
#endregion
#region IsSubclassOf
////驗證typChinese是否是typPerson的子類
////bool b = typChinese.IsSubclassOf(typPerson);
////Console.WriteLine(b);
////判斷typChinese是否是typIXiuFu的子類
////IsSubclassOf不考慮介面,只考慮父子類關係。
//bool b = typChinese.IsSubclassOf(typIXiuFu);
//Console.WriteLine(b);
//Console.ReadKey();
#endregion
#region IsAbstract,判斷某個型別是否是一個抽象的。
//Console.WriteLine(typChinese.IsAbstract);
//Console.WriteLine(typPerson.IsAbstract);
////介面、抽象類、靜態類都不能被例項化,所以這裡都認為是“抽象的”
//Console.WriteLine(typIXiuFu.IsAbstract);
//Console.WriteLine(typMyAbsClass.IsAbstract);
//Console.WriteLine(typMyStaticClass.IsAbstract);
//Console.ReadKey();
#endregion
}
}
}