zoukankan      html  css  js  c++  java
  • 在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

  • 相关阅读:
    Bootstrap-CL:警告
    Bootstrap-CL:略缩图
    Bootstrap-CL:页面标题
    Bootstrap-CL:超大屏幕
    Bootstrap-CL:徽章
    Bootstrap-CL:标签
    Bootstrap-CL:分页
    Bootstrap-CL:面包屑导航
    Bootstrap-CL:导航栏
    Bootstrap-CL:导航元素
  • 原文地址:https://www.cnblogs.com/awpatp/p/1740552.html
Copyright © 2011-2022 走看看