访问私有变量

时间:2011-11-28 22:37:08

标签: c# .net xna

我正在修改游戏,我遇到了一个问题。我正在尝试使用.NET和XNA在C#中将文本绘制到屏幕上,所以我正在使用XNA的SpriteBatch。

问题是,我无法修改任何源文件。我只能加载外部 .cs 文件。我可以查看源代码,变量在类Main.cs中定义为:

private SpriteBatch spriteBatch;

如果我这样定义我自己的SpriteBatch:

public SpriteBatch spriteBatch;

然后它没有绘制,因为我没有绘制方法。现在,我想要做的只是访问Main.spriteBatch,但该变量是私有的,如前所述。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您可以使用反射来检索私有变量或方法的值。

http://www.csharp-examples.net/reflection-examples/

namespace Test
{
    public class Calculator
    {
        public Calculator() { ... }
        private double _number;
        public double Number { get { ... } set { ... } }
        public void Clear() { ... }
        private void DoClear() { ... }
        public double Add(double number) { ... }
        public static double Pi { ... }
        public static double GetPi() { ... }
    }
}

Calculator calc = new Calculator();

// invoke private instance method: private void DoClear()
calcType.InvokeMember("DoClear",
    BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.NonPublic,
    null, calc, null);

要使用参数调用,请传入参数数组而不是null。

Link以进一步提供msdn文档。

答案 1 :(得分:0)

您可以使用反射来访问私有成员,但这不是实际使用的推荐做法。对象的内部实现可能会发生变化,访问它们会违反良好的OOP主体。

这里的类似答案将帮助您完成任务:

Can I change a private readonly field in C# using reflection?