相关疑难解决方法(0)

为什么我可以创建一个名为"var"的类?

不是varC#中的关键字?但为什么我这样做:

public class var { }

public class main
{
    public static void main(string[] args)
    {
        var testVar = new var();
    }
}
Run Code Online (Sandbox Code Playgroud)

var是在代码中使用的是var这是在之前声明的类main类.编译器甚至没有抱怨.

当我这样做时:

public class int { }
Run Code Online (Sandbox Code Playgroud)

或这个:

public class true { }
Run Code Online (Sandbox Code Playgroud)

编译器说int或者true是关键字,不能像那样使用.为什么不一样var

c# .net-4.0

103
推荐指数
4
解决办法
3005
查看次数

什么类型的令牌恰好是Java 10中的"var"?

在最后一期Heinz Kabutz的时事通讯#255 Java 10:推断的局部变量中,显示它var不是Java 10中的保留字,因为您也可以使用它var作为标识符:

public class Java10 {
    var var = 42; // <-- this works
}
Run Code Online (Sandbox Code Playgroud)

但是,您不能使用ie assert作为标识符var assert = 2,因为它assert是一个保留字.

正如在链接的时事通讯中所说的那样,var不是保留字的事实是好消息,因为这允许来自Java的先前版本的代码var用作标识符在Java 10中编译而没有问题.

那么,那是什么var?它既不是显式类型也不是语言的保留字,因此它被允许作为标识符,但是当它用于在Java 10中声明局部变量时它确实具有特殊含义.我们究竟在一个上下文中调用它局部变量声明?

此外,除了支持向后兼容性(通过允许包含var作为标识符的旧代码进行编译),还有其他优点是var 不是保留字吗?

java java-10

18
推荐指数
2
解决办法
1264
查看次数

为什么可以定义名为var或dynamic的类?

今天我注意到我们可以定义一个名为varor 的类dynamic.首先,我认为这是不可能的,因为这些是特殊的关键字,不能用作Class name.但是后来我尝试了,我很惊讶.这是一个奇怪的情况,当我定义两个类:

class var
{

}

class dynamic
{

}
Run Code Online (Sandbox Code Playgroud)

并像这样使用它们:

在此输入图像描述

它没有给我任何错误.但是当我尝试运行我的程序时它会出现这个错误:

无法将类型字符串隐式转换为动态

但是您可能已经注意到,我的dynamic课程表现得像一个标准的C#课.当我尝试这个时:

 dynamic d = new dynamic();
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

无法实例化动态对象.

我们来看看吧 var:

在此输入图像描述

在这种情况下,var仍被评估为隐式类型定义关键字,我的变量类型推断为字符串.(注意它的颜色是绿色而不是蓝色,这是类名颜色).但是当我运行程序时,它给了我相同的异常:

无法将类型字符串隐式转换为var

但有趣的是,当我尝试创建一个像这样的新var实例时:

var d = new var();
Console.WriteLine(d.GetType());
Run Code Online (Sandbox Code Playgroud)

它没有给我任何异常,我得到这个输出:

ConsoleApplication3.var
Run Code Online (Sandbox Code Playgroud)

现在毕竟这些我confused.I'm想知道是什么样的区别就在这里,为什么编译器让我们创建一个名为类vardynamic,它不给我,当我创建一个类名为动态任何错误,但如果我尝试创建动态的实例我收到了一个错误.但是如果我尝试创建一个var实例,它不会给我任何错误.这不是那么令人困惑吗?我在等待清楚的解释.

注意:抱歉我的英语和语法错误.

c# var dynamic

1
推荐指数
1
解决办法
94
查看次数

标签 统计

c# ×2

.net-4.0 ×1

dynamic ×1

java ×1

java-10 ×1

var ×1