using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp7
{
class Program
{
static void Main(string[] args)
{
Stu s = new Stu() { Name = "張三" };
Stu s1 = new Stu() { Name = "李四" };
//獲取方法屬性
//獲取實例的對象
Type t = s.GetType();
Console.WriteLine(t.Name);
Console.WriteLine("//獲取所有方法");
var ff = t.GetMethods();
foreach (var item in ff)
{
Console.WriteLine(item.Name);
}
Console.WriteLine("獲取所有的屬性");
var sx = t.GetProperties();
foreach (var item in sx)
{
Console.WriteLine(item.Name);
//item.Name Name是獲取當前成員的名稱
}
Console.WriteLine("-----------------------");
Console.WriteLine("-----------------------");
//調用方法
//賦值
//給第一個學生賦值
sx[0].SetValue(s , "你");
//讀取值
Console.WriteLine("讀取第一個學生的值");
Console.WriteLine(s.Name);
Console.WriteLine("讀取第二個學生的值");
Console.WriteLine(sx[0].GetValue(s1));
Console.WriteLine(); Console.WriteLine(); Console.WriteLine();
//調用 第一個值是學生信息,第二個是方法參數,沒有參數就傳null
ff[1].Invoke(s,new object[] { "Hello","word"});
//這個是動態加載dll文件
static void Main(string[] args)
{
// 路徑E盤下的dll文件
Assembly a = Assembly.LoadFile(@"e:\ClassLibrary1.dll");
//獲取所有類型
//Type[] atypess = a.GetTypes();
//foreach (Type t1 in atypess)
//{
// Console.WriteLine(t1);
//}
//類型全名
var s = a.CreateInstance("ClassLibrary1.Stu");
//類型全名
Type t = a.GetType("ClassLibrary1.Stu");
//要獲取的屬性名
var name = t.GetProperty("Name");
var age = t.GetProperty("Age");
//賦值
name.SetValue(s, "張三");
age.SetValue(s, 19);
//獲取方法
MethodInfo m = t.GetMethod("Say");
//調用方法,傳入對應參數
m.Invoke(s,new object[] { "晚上"});
Console.ReadKey();
C#反射 如何獲取和賦值基礎
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.