C#变量的语法-为什么在定义新实例时双重使用类名?

C#变量的语法-为什么在定义新实例时双重使用类名?,c#,syntax,methods,C#,Syntax,Methods,真的很简单 初学C#并努力理解为变量分配新实例的语法背后的推理 可能是您不一定需要理解的事情之一,但可以提供对代码执行方式的洞察。问题如下: 如果有一段代码定义变量mm,如下所示: using System; class MyMethod { public static void Main() { string myChoice; MyMethod mm = new MyMethod(); 为什么在“mm”之前需要第一个“MyMethod”

真的很简单

初学C#并努力理解为变量分配新实例的语法背后的推理

可能是您不一定需要理解的事情之一,但可以提供对代码执行方式的洞察。问题如下:

如果有一段代码定义变量
mm
,如下所示:

using System;

class MyMethod
{
    public static void Main()
    {
        string myChoice;

        MyMethod mm = new MyMethod();
为什么在“mm”之前需要第一个“MyMethod”

换句话说,你为什么不能把

mm = new MyMethod();
而不是

MyMethod mm = new MyMethod();
据我所知(这可能是完全错误的),将“=newmymethod();”放在您正在定义MyMethod类的新实例并将其分配给“mm”。“mm”对象已经存在于“MyMethod”类中,那么为什么要在“mm”之前添加“MyMethod”。这对我来说似乎是多余的,所以我想从代码执行的角度来理解发生了什么


提前感谢您的帮助/建议

提供的代码中没有任何内容表明
mm
存在于
MyMethod
类中。它是一个仅存在于该方法中的变量,因此在初始化它时需要指定其类型。

提供的代码中没有任何内容表明
mm
存在于
MyMethod
类中。它是一个仅存在于该方法中的变量,因此您需要在初始化它时指定其类型。

您可以使用
var mm=new MyMethod()
然后编译器将自动推断变量的类型

顺便说一句:
MyMethod
对于类来说是一个非常糟糕的名字


你问题中的以下部分不正确:

“mm”对象已存在于“MyMethod”类中


事实并非如此<代码>mm
在该类中不存在。

您可以使用
var mm=new MyMethod()
然后编译器将自动推断变量的类型

顺便说一句:
MyMethod
对于类来说是一个非常糟糕的名字


你问题中的以下部分不正确:

“mm”对象已存在于“MyMethod”类中


事实并非如此
mm
在该类中不存在。

这是一个旧标准,因为您可能需要这样做

IContact contact = new Person();

但是您可以让编译器通过编写“var”来推断类型。当读到同一行时,类型是明显的(例如,如果您希望类型是“Person”而不是“IContact”),我就使用它,但是当为方法调用的结果分配某些内容时,我明确地说明了类型。

这是一个旧标准,因为您可能希望这样做

IContact contact = new Person();
但是您可以让编译器通过编写“var”来推断类型。当从阅读同一行中可以明显看到类型时(例如,如果您希望该类型为“Person”而不是“IContact”),我会使用此选项,但当为方法调用的结果分配某些内容时,我会明确地说明该类型

“mm”对象已存在于“MyMethod”类中

不,没有

嗯,他反对。但不是变量

MyMethod mm=

declarres是一个名为mm的MyMethod类型的变量

你也可以把它写成

var-mm

然后让编译器对类型进行排序

但最后,您需要指定新对象所分配的变量

由于.NET deamnds变量是DECAERD,因此名称键入错误(稍后使用“mn”)将导致空指针中出现未知n异常,nto,因为该变量是通过使用隐式创建的

“mm”对象已存在于“MyMethod”类中

不,没有

嗯,他反对。但不是变量

MyMethod mm=

declarres是一个名为mm的MyMethod类型的变量

你也可以把它写成

var-mm

然后让编译器对类型进行排序

但最后,您需要指定新对象所分配的变量


这是因为.NET deamnds变量是DECAERD,因此名称键入错误-稍后使用“mn”将导致空指针中出现未知n异常,nto,因为该变量是通过使用隐式创建的。

编写代码的语法如下:

MyMethod mm = new MyMethod();
实际上只是一种简短的写作形式

MyMethod mm;
mm = new MyMethod();
其中,在第一行中指定要使用的变量类型(声明),并告诉运行时需要为其分配内存,在第二行中为其分配一个实际值(定义

[编辑]

很明显,在第一行中,您将需要指定变量的类型,否则您将收缩该行,只定义变量的名称名称,编译器将不知道它是什么:

mm

[/编辑]

与这里已经发布的其他变量一样,如果在嵌套范围内需要相同的变量,那么将其拆分为2会很方便。在开篇文章中给出的代码示例中,当您在需要变量的同一范围内定义变量时,当然不需要这样做

[编辑2]

考虑定义一个变量
MyMethod mm=newmymethod()作为一个变量,就像其他变量一样。编译器不关心您是在类
MyMethod
中还是在任何其他类中执行此操作

如果您的代码看起来像这样,那么更明显的是,不同类型的
OtherClass
MyMethod
之间没有联系

using System;

class OtherClass
{
    public static void Main()
    {
        string myChoice;

        MyMethod mm = new MyMethod();
    }
}
使用与周围类具有相同类型的变量(就像您在自己的示例中所做的那样)是完全合法的,但不是允许您省略类型的“自引用”。只是