当从另一个脚本访问时,有人能向我解释一下C#静态变量的用法吗?
记住,我是C#的新手。静态变量似乎不像在C/C++、Fortran等语言中那样起到同样的作用。因此我有点挣扎,尤其是在以下方面: 我希望能够使用inspector将游戏对象附加到变量,但是可以从另一个脚本访问这些变量(比如,文本UI的颜色),而无需硬编码对象名称(可能会更改)和使用Find/GetComponent 如果我将游戏对象设置为静态,我可以使用classname.objectname之类的语句来访问它们。但是,inspector不再看到这些变量(因为它们是静态的?),因此我无法再使用inspector将游戏对象附加到这些变量上,因此我重新使用GameObject.Find或GetComponent,并在代码中的某个位置对名称进行硬编码。希望,我只是对一些事情一无所知,因此我的问题当从另一个脚本访问时,有人能向我解释一下C#静态变量的用法吗?,c#,C#,记住,我是C#的新手。静态变量似乎不像在C/C++、Fortran等语言中那样起到同样的作用。因此我有点挣扎,尤其是在以下方面: 我希望能够使用inspector将游戏对象附加到变量,但是可以从另一个脚本访问这些变量(比如,文本UI的颜色),而无需硬编码对象名称(可能会更改)和使用Find/GetComponent 如果我将游戏对象设置为静态,我可以使用classname.objectname之类的语句来访问它们。但是,inspector不再看到这些变量(因为它们是静态的?),因此我无法再使用i
因此:如何声明一个变量,以便在inspector中附加一个对象(并避免硬编码对象名称),但不使用Find/GetComponent在不同的脚本中访问它?静态通常是一个坏主意。静态是全局的。差不多在我们发明并发表了globals概念的一周后,我们意识到这是一个可怕的想法。不应使用特定的静态数据来共享数据 关于C#/.NET的唯一“特殊”之处在于它就是我所说的“stricly OOP”。所有内容都必须是类的一部分,包括静态字段。没有“独立”的函数变量,如我从原生C++中记住的。 对于非常恒定的内容,应该只使用静态类和静态字段。函数集合类(请参阅),(编译时)
常量
和只读
(运行时常量)。但就我个人而言,我甚至认为数学课是一个边缘案例。刚好和那班同学一起锻炼。这可能很容易适得其反
需要为静态变量指定实例化的类。以及上述两类常数。这是我在任何上下文中最接近使用static的一次。我希望能够使用检查器将游戏对象附加到变量。我猜这是指游戏引擎,可能是unity,对吧?如果是这样,您应该添加适当的标记。什么意思:script?不要将C#源命名为脚本-这不是PHP!这个问题不是关于
C
的一般性问题,而是关于检查器的特定数据可见性的问题。如果您正在查找何时使用static
的示例,请只查看singleton,其中需要一个readonly static
字段。这是推荐使用的System.Random
例如。对不起,我没有意识到我省略了Unity标记。Unity将C#文件称为脚本,docs.microsoft.com上的许多文档也是如此。我对单身汉不熟悉。我会调查的。static
的存在是有原因的。一般来说,它既不好也不坏。这取决于您如何使用它。此外,readonly
和static
完全不相关。当然,您也可以有非静态的只读的-字段。@HimBromBeere Statics遇到了并且仍然面临着线程所面临的相同问题:它们被用于它们不适用的情况,并且它们不是正确的解决方案-仅仅是因为它们是当时最好的低代码解决方案。|我还只是比较了一下只读到常量。一个是rumtime,另一个是编译时常量。常量是静态(隐式或显式)通常是一个好主意的一种情况。