有些類型的屬性的Set方法被標註為了internal, 或private, 我們外部無法對其進行調用, 這時可以使用反射的方法調用到它.
舉例如下:
使用反射的方法代碼
public void test(){ Assembly asm = Assembly.LoadFile(@"C:\ISAPI\MyPublishing.dll"); Type publishingType = asm.GetType("MyPublishingNameSpace.PublishingType"); ConstructorInfo publishingTypeConstructor = publishingType.GetConstructor(Type.EmptyTypes); Object oPubClass = publishingTypeConstructor.Invoke(new Object[] { }); foreach (PropertyInfo rInfo in publishingType.GetProperties()) { if (rInfo.Name == "PropertyName") { if (rInfo.CanWrite) { rInfo.SetValue(oPubClass, "NewPropertyValue", null); } break; } } MyPublishingNameSpace.PublishingType ptObj = (MyPublishingNameSpace.PublishingType)oPubClass; //Save your reflection work. ptObj.Searilize();}
被反射的類型的源碼
namespace MyPublishingNameSpace{ public class PublishingType { private string _property1 = string.Empty; public PublishingType() { } public string PropertyName { get { return _property1;} internal set { _property1 = value;} } public void Searilize() { //Save object. } }}
參考資料:
Using Reflection to Get and Set values of Properties
http://geekswithblogs.net/shahed/archive/2006/11/19/97548.aspx