在C# 中使用反射调用internal的属性
有些类型的属性的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