C# 澄清对领域的理解

C# 澄清对领域的理解,c#,unity3d,field,C#,Unity3d,Field,我目前正在通过一系列视频教程学习Unity中的C语言,并且刚刚介绍了一些领域。我说字段只是在类级别声明的变量,对吗?是的,你可以这样说 主要区别在于,方法中的变量(也称为局部变量)在方法调用期间使用临时值。下次调用该方法时,变量的上一个值将丢失,您必须再次初始化它们。我不是在说迭代器和捕获变量之类的高级东西 另一方面,类和结构中的变量,即字段,只要对象存在,就存在。也就是说,它们在方法调用之间保持其值 与首先未定义的局部变量不同,当从类创建对象时,会为字段指定默认值。结构字段的行为不同,这取决于

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

是的,你可以这样说

主要区别在于,方法中的变量(也称为局部变量)在方法调用期间使用临时值。下次调用该方法时,变量的上一个值将丢失,您必须再次初始化它们。我不是在说迭代器和捕获变量之类的高级东西

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

与首先未定义的局部变量不同,当从类创建对象时,会为字段指定默认值。结构字段的行为不同,这取决于结构是用作类字段还是变量。结构字段的定义与定义它们的字段或变量的定义相同

正如@elgonzo所评论的,有两种类型的字段

静态字段。它们是用静态修饰符声明的。对于特定的类或结构,静态字段只存在一次,与此类型对象的数量无关。 每个对象(即类或结构实例)存在一个实例字段。 私有实例字段只能由此类或结构的实例方法和构造函数访问,其中,作为私有静态字段,可以由静态和实例方法和构造函数访问。方法包括属性的getter和setter以及索引器

例如。有了这个班

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

也许值得注意的是,这里的答案涉及实例字段/变量或对象变量,它们与给定类型类的实例/对象关联。类变量——顾名思义——是静态字段,与类型类本身关联,独立于任何对象实例……有点吹毛求疵嘿,这是周末,我心情很好-b:只要它们的访问修饰符是public或internal,实例字段不仅可以由类/结构中的实例方法访问,而且还可以从外部访问,当然需要引用它们关联的对象实例。好吧,好吧,我现在就去享受我的周末-因此,我在类/结构中说,这意味着对所述方法的限制。为了澄清,我重新编写了它。除了实例变量和静态变量之外,还可以使用ThreadStatic属性创建线程变量,ThreadStatic属性是ThreadStatic的包装器,使用起来更简单。与名称相反,ThreadStatic变量可以是每个访问线程一个实例变量,也可以是每个访问线程一个静态变量。这看起来像是一个高级工具,但对于包装缺乏线程安全性的服务(例如Random)可能很有用。请注意,Unity不支持ThreadStatic。根据,使用ThreadStatic将导致Unity崩溃。然而,我认为在Unity 4.3中这是完全正确的——而一个没有解释字段是变量的教程可能不是最好的教程。要考虑的是什么是变量,什么不是变量?属性是变量吗?数组元素是变量吗?形式参数是变量吗?那么out参数呢?常量或只读值怎么样?你怎么想,你能证明你的观点吗?通过这种练习,你可以了解事物成为变量的本质。