首先有一個類
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace ConsoleApplication1 8 { 9 public class demo 10 { 11 public string name = "程序員"; 12 } 13 }
測試類
using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks;namespace ConsoleApplication1 {class Program{static void Main(string[] args){Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();Type type = assembly.GetType("ConsoleApplication1.demo"); //命名空間名 + 類名object obj = Activator.CreateInstance(type, true);FieldInfo classField = type.GetField("name");string name = classField.GetValue(obj).ToString();Console.WriteLine(name);}} }
運行后發現已經獲取得到值了
?
因為Activator.CreateInstance是創建一個新實例。
?
但只想想想。這個name的值是固定的。也就是在項目中需要動態賦值
然后動態反射出來。即反射獲取當前實例的值
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Reflection; 5 using System.Text; 6 using System.Threading.Tasks; 7 8 namespace ConsoleApplication1 9 { 10 11 class Program 12 { 13 static void Main(string[] args) 14 { 15 16 //創建一個實例 17 demo d = new demo(); 18 d.name = "開發工程師"; 19 20 FieldInfo field = d.GetType().GetField("name");//獲取類中的一個Field 21 object fieldValue = field.GetValue(d);//獲取這個實例中的Field的代表的屬性 22 23 //Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly(); 24 //Type type = assembly.GetType("ConsoleApplication1.demo"); //命名空間名 + 類名 25 //object obj = Activator.CreateInstance(type, true); 26 27 //FieldInfo classField = type.GetField("name"); 28 //string name = classField.GetValue(obj).ToString(); 29 Console.WriteLine(fieldValue); 30 31 } 32 } 33 }
結果是正確的。
?
博客園有很多前輩寫的
http://www.cnblogs.com/davidyang78/archive/2010/06/09/1754562.html
http://www.cnblogs.com/zhangpengshou/archive/2012/03/21/2409206.html
?