急问:请问一个很简单的反射的问题
public class a
{
string b="123";
}
请问如何在别的地方动态获得b的值呢?其中类型已经确定。
既
public class xx
{
string c;
怎么让c指向b,得到c="123"呢?
}
这个问题够简单吧,好像得用反射,但是我实在写不出来啊。。。。。。。。。
[解决办法]
搂主的问题有点不明却,b并不是静态的,也就是说每个a类都各自有一个b数组,同样xx也是,那么xx中的c数组到底要指向那个a类实例中b数组呢?
只能这样做了
public class a { public string[] b = {"1","2","3"}; } public class xx { public string[] c; public xx(a _a) { c = _a.b; } } class Program { static void Main(string[] args) { a a = new a(); foreach (string s in a.b) { Console.WriteLine(s); } xx xx = new xx(a); foreach (string s in xx.c) { Console.WriteLine(s); } Console.ReadLine(); } }
[解决办法]
良好的设计标准不推荐这样做,如果实在要这样做,推荐看看老外的blog。毕竟这不是一个很简单的问题,
http://codebetter.com/blogs/patricksmacchia/archive/2007/09/12/dissecting-an-undeterministic-windows-forms-v2-bug.aspx
可以看看An idea for the fix下面的代码,是怎么读到一个private的成员的。
[解决办法]
不好意思,如果你指要获取私有成员的话:
public class a { string[] b = { "1", "2", "3" }; public string[] B { get { return b; } } } public class xx { string[] c; public string[] C { get { return c; } } public xx(a _a) { c = ((string[])_a.GetType().GetField("b", BindingFlags.NonPublic|BindingFlags.Instance).GetValue(_a)); } } class Program { static void Main(string[] args) { a a = new a(); foreach (string s in a.B) { Console.WriteLine(s); } xx xx = new xx(a); foreach (string s in xx.C) { Console.WriteLine(s); } Console.ReadLine(); } }
[解决办法]
如果是只有一个class a的话,为什么不
public class xx:a ------------------------------让xx从a派生呢?到时候直接应用就是了
{
public void xxx(string xxxx)
{
string[] c;
c = 这时要根据参数xxxx的值来确定c指向a.aa还是b.bb,就是不知道这个地方的代码怎么写。
}
}