gpt4 book ai didi

c# - 无法通过对象引用访问类的成员

转载 作者:行者123 更新时间:2023-11-30 20:05:21 25 4
gpt4 key购买 nike

下面的代码执行没有错误并打印“In some”,这意味着语句

m[0].Invoke(o, args);

在对象 o 上调用 some 函数,它是 foo 类的成员,并影响其公共(public)变量 i。但是当我们取消注释代码的最后一行并尝试编译它时,它会产生错误。为什么??

using System;
using System.Reflection;

class foo
{
public int i;
public foo(int ii = 0)
{
i = ii;
}
public void some(int ii)
{
i = ii;
Console.WriteLine("In some ");
}
}

class main
{
static public void Main()
{
foo f = new foo();
object o = new foo();

Type t = typeof(foo);


object[] args = new object[1];
args[0] = 9;
MethodInfo[] m = t.GetMethods();
m[0].Invoke(o, args);
//Console.WriteLine(o.i);
}
}

最佳答案

But when we uncomment the last line of the code and try to compile it, it produces an error. Why??

因为您已将 o 声明为 System.Object,它没有定义变量 i编译器有关。您需要将其转换为已知类型,或使用反射来检索此值。

例如:

// You can cast here, since you know the type
foo oAsFoo = o as foo;
Console.WriteLine(oAsFoo.i);

或者,使用反射来获取值:

FieldInfo field = t.GetField("i");
Console.WriteLine(field.GetValue(o));

关于c# - 无法通过对象引用访问类的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11526786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com