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