首页 > 解决方案 > 为什么在方法之外的类中不允许对象赋值

问题描述

在任何 c# 类中,这是允许的

Class Program
{
 Dub obj=new Dub()
}

但不是这个

Class Program
{
Dub obj1= null;
Obj1=new Dub();
}

仅在课堂上尝试,而不是在任何功能中。

标签: c#oop

解决方案


该语言旨在将您的“事物”(类字段和类属性)与如何使用它们(方法)分开。然而,某些东西只是语法糖,可以让你更简洁。

事实上,你的代码

Class Program
{
    Dub obj=new Dub()
}

在功能上(和语义上)等价于这个

Class Program
{
    Dub obj;

    public Program()
    {
        obj = new Dub();
    }
}

因为它声明了一个字段(Dub obj是执行此操作的代码部分),然后在构造它时对其进行初始化(这= new Dub()就是您说要对其进行初始化的方式)。

你可能想知道为什么你有两种方法来做同样的事情,但关键是你在初始化器中写的必须是一个可以分配给正在初始化的字段的表达式。这是一个受限制的事情,当事情很容易时,您可以使用更少的代码来编写和审查。如果这不合适,您可以使用构造函数,您可以在其中自由地执行初始化程序中不允许的所有花哨的事情。

简而言之,指令是可以在方法内部使用的几乎不受约束的语句。表达式是指令,反之则不然初始化程序需要设计表达式

有关初始化器的更多信息,您可以查看Field MSDN 文档,其中包含更多详细信息和示例。


推荐阅读