我正在修改游戏,我遇到了一个问题。我正在尝试使用.NET和XNA在C#中将文本绘制到屏幕上,所以我正在使用XNA的SpriteBatch。
问题是,我无法修改任何源文件。我只能加载外部 .cs 文件。我可以查看源代码,变量在类Main.cs
中定义为:
private SpriteBatch spriteBatch;
如果我这样定义我自己的SpriteBatch:
public SpriteBatch spriteBatch;
然后它没有绘制,因为我没有绘制方法。现在,我想要做的只是访问Main.spriteBatch
,但该变量是私有的,如前所述。
有什么想法吗?
答案 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?