327得票7回答
一个栈的目的是什么?为什么我们需要它?

我现在正在学习MSIL以了解如何调试我的C# .NET应用程序。 我一直在想:栈的目的是什么? 只是为了让我的问题更加清晰: 为什么要从内存转移到栈或“加载”? 另一方面,为什么要从栈到内存或“存储”转移? 为什么不能都放在内存中呢? 是因为这样更快吗? 是因为它基于RAM吗? 为了...

172得票20回答
在MSIL中,有哪些C#或VB.NET无法实现的功能?

所有使用.NET语言编写的代码都会编译为MSIL,但是是否有特定任务/操作只能直接使用MSIL完成呢? 在MSIL中,我们也可以更轻松地完成一些任务,而不像C#、VB.NET、F#、j#或其他任何.NET语言那样麻烦。 到目前为止,我们有以下这些: 尾递归 泛型协变/逆变(在C#4和VB 1...

155得票11回答
动态替换C#方法的内容?

我想要做的是更改 C# 方法被调用时的执行方式,以便我可以编写类似于以下代码的内容: [Distributed] public DTask<bool> Solve(int n, DEvent<bool> callback) { for (int m = 2; ...

153得票5回答
Java虚拟机和CLR

作为对题目《MSIL和Java字节码有何不同?》的某种跟进,Java虚拟机如何工作与.NET Framework公共语言运行时(CLR)如何工作有哪些主要区别或相似之处?同时,.NET Framework CLR是否是一台“虚拟机”,或者它是否没有虚拟机的属性?

150得票1回答
为什么C#编译器将"!="翻译成">"?

我偶然发现C#编译器将这个方法转换为:static bool IsNotNull(object obj) { return obj != null; } …转换为这个CIL:.method private hidebysig static bool IsNotNull(object o...

101得票3回答
MSIL方法中hidebysig的目的是什么?

使用ildasm和C#程序,例如。 static void Main(string[] args) { } 提供: .method private hidebysig static void Main(string[] args) cil managed { .entrypoi...

100得票3回答
为什么这个条件语句 (null || !TryParse) 会导致 "使用未赋值的本地变量" 的错误?

下面的代码会导致“未分配本地变量"numberOfGroups"的使用”的结果: int numberOfGroups; if(options.NumberOfGroups == null || !int.TryParse(options.NumberOfGroups, out number...

99得票4回答
简单基准测试中的性能异常提升

昨天我找到了一篇由Christoph Nahr撰写的.NET Struct Performance文章,其中对几种语言(C++、C#、Java、JavaScript)进行了基准测试,测试的是一个将两个点结构体(double元组)相加的方法。 结果发现,C++版本需要大约1000毫秒才能执行完...

93得票2回答
为什么!0是Microsoft Intermediate Language (MSIL)中的一种类型?

在许多 MSIL 列表中,我观察到以下内容:System.Nullable`1<!0> etc ... 或者class !0 etc ... 在这种情况下,!0 的意思是什么?

91得票4回答
beforefieldinit标志是什么作用?

beforefieldinit标志是什么意思?当我查看我的类的IL时,我看到了这个标志,但我不知道它实际上是做什么的?