C#反射(有参构造+访问私有属性)

1using System;

2

3namespace ActivatorDemo

4{

5       class Demo

6       {

7

8              [System.Runtime.InteropServices.DllImport("msvcrt.dll")]

9              static extern bool system(string str);

10

11             [STAThread]

12             static void Main(string[] args)

13             {

14            

15                     object team = null;

16

17                     {

18                             object[] members = (object[])Array.CreateInstance(System.Reflection.Assembly.Load("ActivatorDemo").GetType("ActivatorDemo.Member"),3);

19                             members[0] = CreateInstance("ActivatorDemo","ActivatorDemo.Member",new object[]{"Bill","PL"});

20                             members[1] = CreateInstance("ActivatorDemo","ActivatorDemo.Member",new object[]{"Mike","SE"});

21                             members[2] = CreateInstance("ActivatorDemo","ActivatorDemo.Member",new object[]{"Gary","JE"});

22

23                             team = CreateInstance("ActivatorDemo","ActivatorDemo.Team",new object[]{members});

24                     }

25

26                     {

27                             //Get 'Members' Property Value

28                             System.Reflection.PropertyInfo membersInfo = GetPropertyInfo(team.GetType(),"Members",System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);

29                             object[] members = membersInfo.GetValue(team,null) as object[];

30                            

31                             foreach(object member in members)

32                             {

33                                    //Get 'Name' Property Value

34                                    System.Reflection.PropertyInfo pInfo = GetPropertyInfo(member.GetType(),"Name",System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);

35                                    string name = pInfo.GetValue(member,null) as string;

36

37                                    //Get 'Duty' Property Value

38                                    pInfo = GetPropertyInfo(member.GetType(),"Duty",System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);

39                                    string duty = pInfo.GetValue(member,null) as string;

40

41                                   System.Console.WriteLine(String.Format("Name: {0}  Duty: {1}",name,duty));

42                                    System.Console.WriteLine(System.Environment.NewLine);

43                             }

44                     }

45

46                     system("pause");

47             }

48

49             private static object CreateInstance(string assemblyName,string typeName,object[] activetionAttributes)

50             {

51                     System.Reflection.Assembly assembly = System.Reflection.Assembly.Load(assemblyName);

52                     return System.Activator.CreateInstance(assembly.GetType(typeName),activetionAttributes);

53             }

54

55             private static System.Reflection.PropertyInfo GetPropertyInfo(System.Type type,string propertyName,System.Reflection.BindingFlags bindingAttr)

56             {

57                     foreach(System.Reflection.PropertyInfo pInfo in type.GetProperties(bindingAttr))

58                     {

59                             if (pInfo.Name.Equals(propertyName)) return pInfo;

60                     }

61                     return null;

62             }

63

64      }

65

66      public class Team

67      {

68             private Member[] _members = null;

69            

70             public Team(Member[] members)

71             {

72                     _members = members;

73             }

74

75             private Member[] Members

76             {

77                     get

78                     {

79                             return _members;

80                     }

81             }

82

83      }

84

85      public class Member

86      {

87             private string _name = null;

88             private string _duty = null;

89

90             public Member(string name,string duty)

91             {

92                     _name = name;

93                     _duty = duty;

94             }

95

96             private string Name

97             {

98                     get

99                     {

100                            return _name;

101                    }

102            }

103

104            private string Duty

105            {

106                    get

107                    {

108                            return _duty;

109                    }

110            }

111     }

112}

113

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值