在RunTime上更改变量类型

时间:2011-09-06 14:51:12

标签: c# variables reflection types

今天我和我的学院面临挑战,我放弃了,不知道如何实现它。 有没有办法声明一个String,因为Constant和on Load Event可能使用Reflection将String更改为非Constant从XML赋值,而不是再次将其更改为Constant。

所有执行该操作的代码(常量到非常量)应该存储在字符串中,并且在类型更改之前加载时,它应该被解密并注入到应用程序中。

示例:

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

PS:请抱歉,但我不知道从哪里开始,并在这里显示一些代码。

3 个答案:

答案 0 :(得分:1)

您不能将其声明为const,但可以将其声明为static readonly

private static readonly string Foo = ReadValueFromAssembly();

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

这会做你需要的一切吗?关于“应该解密并注入应用程序的代码”你的意思并不是很清楚,但是你可以让上面的方法做正常的事情。

作为旁注,在像这样的类型初始化器中做大量工作通常是个坏主意。

编辑:您可以将代码存储为字符串,使用CSharpCodeProvider在执行时编译它,然后执行编译的代码。我在"Snippy"中有一个示例,我在深度中使用C#作为编译片段的快速工具。

答案 1 :(得分:0)

理论上是可能的。见

  

如何使用C#编译器以编程方式编译代码

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

您可以使用上面文章中提到的API编写代码并编译。

我之前没有这样做,但它应该让你知道如何开始。

另见,

Can I change value of constant in C#?

答案 2 :(得分:0)

它甚至可能在运行时不存在,编译器可能只是用它们的文字值替换它的所有用法(事实上,它可能有,但我不认为它是标准所要求的。)

所以不,我不明白这是怎么可能的。