Доступ к закрытой переменной - PullRequest
0 голосов
/ 29 ноября 2011

Я модифицирую игру и столкнулся с проблемой. Я пытаюсь нарисовать текст на экране в C # с .NET и XNA, поэтому я использую SpriteBatch XNA.

Проблема в том, что я не могу изменить исходные файлы. Я могу загружать только внешние .cs файлы. Я могу посмотреть на источник, и переменная определяется так же, как в классе Main.cs:

private SpriteBatch spriteBatch;

Если я определю свой собственный SpriteBatch следующим образом:

public SpriteBatch spriteBatch;

тогда он не рисует, потому что у меня нет метода рисования. Теперь все, что я хочу сделать - это получить доступ к Main.spriteBatch, но эта переменная является приватной, как упоминалось ранее.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 29 ноября 2011

Вы можете использовать отражение, чтобы получить значение закрытых переменных или методов.

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.

Ссылка для дальнейшей документации из msdn.

0 голосов
/ 29 ноября 2011

Вы можете использовать рефлексию для доступа к приватному члену, но на самом деле это не рекомендуемая практика. Внутренняя реализация объектов может быть изменена, и доступ к ним является нарушением хорошего принципала ООП.

Подобный ответ поможет вам выполнить задачу:

Можно ли изменить частное поле только для чтения в C # с помощью отражения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...