c# - 这些声明之间有什么区别1类objClass;和2类objClass = null

标签 c# class oop declaration

这些声明之间有什么区别吗?

 Animal animal;  
 Animal animal1 = null;

最佳答案

不,没有显着差异。最后,在运行时,您将有一个名为animal的变量,其类型为Animal,在定义时其值将为null,然后在逻辑上将其值设置为非null值,以便使用它。

但是,有些人会选择第一个而不是第二个声明,反之亦然。此外,有人会认为在第二种情况下null的分配是多余的。例如,如果您使用ReSharper,我想您会注意到一条消息,提示在那里设置null是多余的。

最后,但并非最不重要的一点是,我想您定义了一个Animal类型的变量,以后再尝试设置它的值(我指的是第一种情况)。如果是这样,您就处于良好状态。否则,如果您具有以下片段:

Animal animal;
if(animal==null)
{

}


您可能会在编译前收到警告,并收到以下说明的编译错误:


  使用未分配的局部变量“动物”


如果仅声明变量而从未使用过变量,则将得到以下警告:


  声明了“动物”变量,但从未使用过


以上所有都是针对局部变量的情况,如果我们使用的是类变量,那么情况就有些不同了。如果创建控制台应用程序,并且具有以下代码段:

class Program
{
    static Animal animal;

    static void Main(string[] args)
    {
        if(animal==null)
        {

        }
    }
}


您不会收到任何编译错误。您只会收到带有以下说明的警告:

Field 'Program.animal' is never assigned to, and will always have its default value null

关于c# - 这些声明之间有什么区别1类objClass;和2类objClass = null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37982669/

相关文章:

c# - 什么安全类型最适合 WCF (wsHttpBinding) 服务及其跨域客户端,并且两者都使用相同的数据库

c# - 尝试使用 PunRPC(Unity 和 Photon)发送 RPC 但出现错误 "Object reference not set to an instance of an object"

从 child 访问 PHP 私有(private)变量

c++ - 从类访问类中的类对象

java - Java 对象和类/接口(interface)之间的关系程度?

c# - 无法解析类型 'System.Net.Http.HttpClient' 的服务

c# - JsonSchemaGenerator 字符串的自定义 ContractResolver

c++ - 类转储创建的奇怪 CDStructures.h

python - 传递列表并将其长度设置为python中的默认参数

java - 为什么 DrJava 返回静态错误?