澄清对领域的理解

时间:2018-10-27 16:53:35

标签: c# unity3d field

我目前正在通过一系列视频教程在Unity中学习C#,并且刚刚介绍了一些领域。我的说法是正确的,字段只是在类级别声明的变量?谢谢你。

1 个答案:

答案 0 :(得分:1)

是的,你可以这样说。

主要区别在于方法中的变量(也称为局部变量)具有在方法调用期间使用的临时值。下次调用该方法时,变量的先前值将丢失,您必须再次对其进行初始化。 (我不是在谈论诸如迭代器和捕获变量之类的高级内容。)

另一方面,只要对象存在,类和结构中的变量(即 fields )就一直存在。也就是说,它们在方法调用之间保持其价值。

与首先未定义的局部变量不同,从类创建对象时,将为字段分配默认值。结构字段的行为有所不同,具体取决于该结构用作类字段还是变量。 struct字段具有与定义它们的字段或变量相同的定义。


正如@elgonzo所说,字段有两种类型

  • 静态字段。它们用static修饰符声明。静态字段对于特定的类或结构仅存在一次,而与此类对象的数量无关。
  • 实例字段每个对象(即类或结构实例)存在一次。

私有实例字段只能由此类或结构的实例方法和构造函数访问,而私有静态字段只能由静态方法,实例方法和构造函数访问。 (方法包括属性的获取器和设置器以及索引器。)

示例。上这堂课...

public class A
{
    private static int _staticCounter;
    private int _instanceCounter;

    public void Count()
    {
        _staticCounter++;
        _instanceCounter++;
    }

    public void PrintCount()
    {
        Console.WriteLine($"Static = {_staticCounter}, Instance = {_instanceCounter}");
    }

    public static void PrintStatic()
    {
        Console.WriteLine($"Static = {_staticCounter}"); // Can only access static fields.
    }
}

...此测试...

A x = new A();
A y = new A();

x.Count();
x.Count();
y.Count();
y.Count();
y.Count();

x.PrintCount();
y.PrintCount();
A.PrintStatic();
Console.ReadKey();

...将其打印到控制台

Static = 5, Instance = 2
Static = 5, Instance = 3
Static = 5