C#变量的语法-为什么在定义新实例时双重使用类名?
真的很简单 初学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”
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();
}
}
使用与周围类具有相同类型的变量(就像您在自己的示例中所做的那样)是完全合法的,但不是允许您省略类型的“自引用”。只是