Изменение типа переменной в RunTime - PullRequest
0 голосов
/ 06 сентября 2011

Сегодня у меня была проблема с моим Колледжем, и я потерпел неудачу, не зная, как ее решить. Есть ли способ объявить строку, как константу и при событии загрузки, возможно, используя Reflection, чтобы изменить строку на непостоянную, присвоить значение из XML, чем снова изменить ее на константу.

И весь код, который это делает (с константы на непостоянство), должен храниться в строке, а при загрузке до изменения типа он должен быть дешифрован и введен в приложение.

Пример:

private const String RegNumber = "";
//Change RegNumber to Writable String
//Change RegNumber value
//Than Change RegNumber back to const again

PS: Пожалуйста, извините, но я не знаю, с чего начать, и покажу здесь какой-нибудь код.

Ответы [ 3 ]

1 голос
/ 06 сентября 2011

Вы не можете объявить его как const, но вы можете объявить его как static readonly:

private static readonly string Foo = ReadValueFromAssembly();

static string ReadValueFromAssembly()
{
    // Perform your logic and return the string here
}

Это будет делать все, что вам нужно?Не совсем понятно, что вы имеете в виду под «кодом, который [...] должен это дешифровать и внедрять в приложение», но вы можете заставить вышеуказанный метод делать все, что вам нужно, как обычно.

Как примечание, обычно плохая идея выполнять большую работу в инициализаторе типа, подобном этому.

РЕДАКТИРОВАТЬ: Вы можете сохранить код в виде строки, используйте CSharpCodeProviderскомпилировать его во время выполнения, а затем выполнить скомпилированный код.У меня есть пример этого в "Snippy" , который я использовал для C # в глубине как быстрый инструмент для компиляции фрагментов.

0 голосов
/ 06 сентября 2011

Он может даже не существовать во время выполнения, компилятор мог бы просто заменить все его использования их литеральными значениями (на самом деле, он, вероятно, имеет, хотя я не думаю, что это требуется стандартом).

Так что нет, я не понимаю, как это могло быть возможно.

0 голосов
/ 06 сентября 2011

Теоретически возможно.См.

Как программно скомпилировать код с использованием компилятора C #

http://support.microsoft.com/kb/304655

Вы можете написать код в строку и скомпилировать с использованием упомянутого APIв статье выше.

Я не делал этого раньше, но это должно дать вам представление о том, как начать.

Также см.,

Могу ли я изменить значениепостоянной в C #?

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