如果我想在C#中缩小变量的范围,我可以引入额外的括号 - 即:
class Program
{
static void Main(string[] args)
{
myClass x = new myClass();
x.MyProperty = 1000;
Console.WriteLine("x = " + x.MyProperty);
{
myClass y = new myClass();
y.MyProperty = 2000;
Console.WriteLine("y = " + y.MyProperty);
}
myClass y2 = new myClass();
y2.MyProperty = 3000;
Console.WriteLine("y2 = " + y2.MyProperty);
}
class myClass
{
public int MyProperty { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
在ide中,我不能再在新大括号引入的范围之外引用y.我原以为这意味着变量y可用于垃圾收集.
(有趣的是,当使用反射器查看编译后的代码时,无论是否有额外的大括号,都没有区别)
使用VB.net时是否有类似的方法缩小范围?这对内部作用域中定义的变量何时可能被垃圾收集有影响吗?
因此,在下面的代码中,您会注意到"//此项目已被混淆且无法翻译".
我想知道的是,这是否意味着注释代替了一些混淆的代码,后面的内容实际上没有被混淆,或者它是否意味着"下面的代码被混淆了"?
从我在网上可以找到它听起来像前者但我不确定.代码显然看起来很模糊,但它不是不可翻译的,只是搞笑.
public static NameValueCollection ParseStringIntoNameValueCollection(string responseString, bool undoCallbackEscapes)
{
// This item is obfuscated and can not be translated.
NameValueCollection values;
string[] strArray;
int num;
string str2;
string str3;
int num3;
goto Label_0027;
Label_0002:
switch (num3)
{
case 0:
if (!undoCallbackEscapes)
{
goto Label_0057;
}
num3 = 4;
goto Label_0002;
case 1:
goto Label_00E5;
case 2:
if (num < strArray.Length)
{
string str = strArray[num];
int index = str.IndexOf('=');
str2 = str.Substring(0, index);
str3 = str.Substring(index + 1); …Run Code Online (Sandbox Code Playgroud) 我对.NET有些陌生,但对编程并不陌生,我对有关反汇编编译.NET代码的趋势和兴奋感到有些困惑.这似乎毫无意义.
.NET的高级易用性是我使用它的原因.我在资源有限的环境中编写了C和实际(硬件处理器)程序集.为了提高效率,这就是为了这么多细节而花费精力的原因.在.NET领域,如果你浪费时间深入了解实现中最神秘的细节,那就有可能失去拥有高级面向对象语言的目的.在使用.NET的过程中,我调试了通常的性能问题,这是一个奇怪的竞争条件,我通过阅读自己的源代码完成了所有这些,从来没有想过编译器生成什么中间语言.例如,很明显,for(;;)循环比数组上的foreach()更快,考虑到foreach()将使用带有方法调用的枚举对象来进行下一次而不是变量的简单增量,这很容易通过几百万次紧密循环运行来证明(不需要拆卸).
究竟是什么让IL愚蠢地拆解是因为它不是真正的机器代码.这是虚拟机代码.我听说有些人实际上喜欢移动指令来优化它.你在跟我开玩笑吗?即时编译的虚拟机代码甚至不能以本机编译代码的速度对(;;)循环进行简单的紧缩.如果你想从处理器中挤出最后一个循环,那么使用C/C++并花时间学习实际的汇编.这样你花在理解大量低级细节上的时间实际上是值得的.
那么,除了手上有太多时间之外,人们为什么要拆解.NET(CLR)二进制文件呢?
我更喜欢使用反射器浏览程序集,即使我有源代码,特别是当我移动到新项目时。但我觉得如果能在 Reflector 中看到源代码的 XML 注释就好了。
有任何插件可以做到这一点吗?
提前致谢,乌代
它出现在C#中你不能覆盖后减量运算符?
我是"reflectoring"和跨越一些代码,反射器转换成跑了decimal.op_Decrement(x),我是想弄清楚这是否意味着--x或x--.
public struct IntWrapper
{
public static IntWrapper operator --(IntWrapper value)
{
return new IntWrapper(value.value - 1);
}
public static IntWrapper operator (IntWrapper value)--
{
???
}
private int value;
public IntWrapper(int value)
{
this.value = value;
}
}
Run Code Online (Sandbox Code Playgroud)
框架是否仅使用"预减量"版本进行"后递减"操作?
我在工作中维护一个C#程序,由于硬盘崩溃,我已经丢失了一大堆已经部署的版本的代码(这是我自己的错误,因为我没有经常推送git存储库)现在我必须做一些更改该程序.我有程序的旧版本的源代码,我想反编译exe并将其与旧源合并以恢复丢失的代码.
我知道我可以使用像反射器这样的工具反编译,但我不想手动将它与旧代码合并,因为我可以再次编码更改(大约1-2天的工作).这是可能的还是我必须手动完成代码转储?
我正在查看我在Reflector中创建的枚举,并且有一个名为"value__"的公共整数字段.
这个会员的目的是什么?
链接或对文档的引用适用于答案.
谷歌搜索是一种痛苦,因为"value__"正在回归"价值".
我一直在寻找近一个小时,只找到下面的链接.其中大多数是不同网站上的同一篇文章.他们都展示了如何通过反射访问成员,但没有一个解释成员的用途.
http://tfl09.blogspot.com/2008/12/enums-enum-values-and-powershell.html
http://www.mail-archive.com/dotnet@discuss.develop.com/msg02431.html
UPDATE
下面的最后一个链接讨论(在底部)你不能使用value__作为枚举值,因为它被重新保留,但没有说明原因.
http://www.vijaymukhi.com/documents/books/csadv/chap3.htm
编译错误
错误CS0076:枚举器名称'value__'是保留的,不能使用...仅对于枚举,它不允许我们使用保留字值___,因为它必须在内部使用相同的字来跟踪枚举.
更新2
下面的链接是MSDN页面,对于编译器错误,也说"value__"是保留的.但仍然没有找到会员所做的事情的快乐....
http://msdn.microsoft.com/en-us/library/e3988xhs(v=vs.71).aspx
反正是否阻止人们使用Reflector.net反编译我的.exe c#应用程序?我知道有很多帖子关于这个,但我真的不在乎人们是否可以看到我的代码我唯一想要"隐藏"的是我的数据库连接字符串.
我目前在c#中使用"设置"来保存数据库连接的信息.我想知道在我的项目的设置中使用这些字符串是否会阻止人们看到它?
我在visual studio 2008中使用DotFuscator,但我听说它并没有阻止人们反编译我的程序.
我知道我可以使用Web服务,但我的服务器将在Linux上,所以我想我不能在Linux上存储Web服务.
为什么.Net实现了Math.Min(float,float)函数,如下所示:
public static float Min(float val1, float val2)
{
if ((double) val1 < (double) val2 || float.IsNaN(val1))
return val1;
else
return val2;
}
Run Code Online (Sandbox Code Playgroud)
虽然我可以看到使用IsNaN我不明白为什么他们在比较值时会转换为double.这不比简单写作慢val < val 2吗?特别是如果我想用它来将数字钳位到数字而没有像0f或那样精确1f.
我是否应该继续实施一个自定义数学库,另外还需要具有非NaN值以获得最佳性能,还是浪费时间?
public static float Min(float a, float b)
{
return a < b ? a : b;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Reflector的反汇编功能来理解一种方法.正如使用此工具的任何人都知道的那样,某些代码会显示C#标签,这些标签(可能)未在原始来源中使用.
在110行方法中,我看到有11个标签语句.随机片段示例:
Label_0076:
if (enumerator.MoveNext())
{
goto Label_008F;
}
if (!base.IsValid)
{
return;
}
goto Label_0219;
Label_0087:
num = 0;
goto Label_01CB;
Label_01CB:
if (num < entityArray.Length)
{
goto Label_0194;
}
goto Label_01AE;
Label_01F3:
num++;
goto Label_01CB;
Run Code Online (Sandbox Code Playgroud)
什么样的代码使Reflector在任何地方都显示这些标签,为什么不能将它们拆开呢?
是否有一种很好的解密技术?
reflector ×10
.net ×5
c# ×5
disassembly ×2
.net-4.0 ×1
decompiling ×1
double ×1
enums ×1
il ×1
math ×1
obfuscation ×1
scope ×1
settings ×1
vb.net ×1
xml-comments ×1