Tag: 编译器构造

C#编译器可以编译VB.Net代码吗?

我在ASP.NET上找到了以下内容。 我正在学习并对以下内容感到好奇。 IL体系结构的第二个主要优点是它使Framework能够与语言保持中立。 在很大程度上,语言选择不再取决于任何语言相对于另一种语言的能力,而是取决于他们对开发者或tam的偏好。 您甚至可以在单个应用程序中混合语言。 用C#编写的类可以从VB2005类派生,并且在C @方法中抛出的exception可以在VB @ 005方法中捕获。 我的问题是,ASP.NET是否使用相同的编译器来编译VB.net和C#? 更新:(另一个查询) C#编译器可以编译VB.Net代码吗?

编译器生成的事件的后备字段是否始终保证使用与事件相同的名称?

C#允许我们创建自定义事件访问器 。 Action _custom; public event Action Custom { add { _custom = (Action)Delegate.Combine( _custom, value ); } remove { _custom = (Action)Delegate.Remove( _custom, value ); } } 如果未指定它们, 编译器将为您创建它们 。 C#语言规范: 编译类似字段的事件时,编译器会自动创建存储以保存委托,并为事件创建访问器,以便向委托字段添加或删除事件处理程序。 反编译的源代码使用dotPeek进行简单的public event Action Public; 看起来如下: private Action Public; public event Action Public { add { Action action = this.Public; Action comparand; do […]

为什么未自动初始化未分配的局部变量?

似乎没有办法在代码中使用未分配的局部变量或检查它们,因为编译器吐出Use of unassigned local variable错误。 为什么编译器在编译时不对这些变量使用default(T) ? 即使对值类型更难做,在这种情况下,引用类型也可以很容易地初始化为null ,对吧? 这是一些测试代码: public void Test ( ) { int x; string s; if ( x == 5 ) Console.WriteLine ( 5 ); if ( s != null ) Console.WriteLine ( “s” ); } 返回: Use of unassigned local variable ‘x’ Use of unassigned local variable ‘s’ 更新: […]

为什么编译器决定2.3是double而不是decimal?

为什么编译器决定2.3是double,所以这段代码不能编译: decimal x; x = 2.3; // Compilation error – can not convert double to decimal. x = (decimal) 2.3 // Ok 为什么编译器不这样想: 他想得到一个小数,他给我一个可以是小数的值,所以它是小数! 为什么这不会出现编译错误: short x; x = 23; // OK 谁说23不是int?

LINQ如何编译成CIL?

例如: var query = from c in db.Cars select c; foreach(Car aCar in query) { Console.WriteLine(aCar.Name); } 一旦编译,这将如何翻译? 幕后发生了什么?

如何存储对静态类的引用?

所以类似于: public static class StaticClass {} public class InstanceClass { static StaticClass StaticProperty {get;set;} public InstanceClass() { InstanceClass.StaticProperty = StaticClass; } } 我认为可以做到这一点,但编译器返回这些错误: 静态类型不能用作参数 静态类型不能用作返回类型 编辑:我知道这不起作用,但为什么? 我想StaticClass存储在内存中的某个地方,因此可以允许其他变量在同一个内存中引用它,对吧? EDIT2:其中一个用例是这样的: 假设您收集了5个不同的静态类而没有源代码,并且它们执行通用的东西,因此您希望通过单个静态类方便地访问它们。 你可以这样做: public static class GenericStuff { public LinearAlgebra LinearAlgebra {get;set;} public StringUtilities String {get;set;} public GeometryOps Geometry {get;set;} } 并使用它像: GenericStuff.LinearAlgebra.GetAngleBetweenVectors(v0, v1); 您可以想到的其他一些用例。

为什么这个明显的无限递归没有给出编译器警告?

几个月前,我不得不修复一些导致一些问题的代码。 代码看起来基本上是这样的: int badFun() { return badFun(); } 这显然导致了堆栈溢出,即使在我正在使用的高级语言中(SilkTest中的4Test)。 这段代码无法被视为有益。 问题的第一个迹象是脚本完成后看到的警告,但没有编译错误或警告。 奇怪的是,我尝试用C ++,C#和Python编写具有相同结构的程序,并且所有这些程序都编译/解释时没有语法错误或警告,即使在所有情况下都存在运行时错误。 在任何这些情况下我都没有看到任何警告。 为什么默认情况下这不是一个可能的问题? 编辑:我尝试用所有三种语言编写相应的函数,所以我添加了这些函数标签。 我对代码这样的代码没有任何警告的整体原因更感兴趣。 如有必要,请重新登记。

使用’var’和’dynamic’时的exception

我在Anomaly上碰到了一点,这是第一次使用var关键字我。 采用这种非常简单的方法 public static Int32? GetNullableInt32(Int32 num) { return new Nullable(num); } 现在我们可以使用dynamic参数调用此方法,一切都将按预期工作。 public static void WorksAsAdvertised() { dynamic thisIsAnInt32 = 42; //Explicitly defined type (no problems) Int32? shouldBeNullableInt32 = GetNullableInt32(thisIsAnInt32); Console.Write(shouldBeNullableInt32.HasValue); } 但是,通过使用隐式类型声明shouldBeNullableInt32 ,结果远非我所期望的。 public static void BlowsUpAtRuntime() { dynamic thisIsAnInt32 = 42; //Now I’m a dynamic{int}… WTF!!! var shouldBeNullableInt32 = GetNullableInt32(thisIsAnInt32); //Throws a […]

以原生速度运行动态编译的C#代码……怎么样?

我已经阅读了几篇关于编写和编译动态C#代码的post。 例如, 这篇文章 。 我知道它可以通过几种方式完成。 但是,调用代码调用程序很慢。 我做了一个简单的基准测试,它比调用本机方法慢了约500倍。 我想要做的是相当于加载DLL并直接调用其中一个方法(“本机”),这将提供我想要的速度优势。 最简单的方法是什么? 将动态代码编译为dll然后加载它? 可以在记忆中完成吗? 编辑 我不关心编译时间。 只执行。 编辑2,3 这是我写的基准代码: public static int Execute(int i) { return i * 2; } private void button30_Click(object sender, EventArgs e) { CSharpCodeProvider foo = new CSharpCodeProvider(); var res = foo.CompileAssemblyFromSource( new System.CodeDom.Compiler.CompilerParameters() { GenerateInMemory = true, CompilerOptions = @”/optimize”, }, @”public class […]

Javascript和C#交叉编译和转换

将Javascript交叉编译或转换为C#并返回的各种工具有哪些? 如何在JS中用C#或C#执行JS? 这是一个很受欢迎的问题,我将为此提供答案。