Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当从另一个脚本访问时,有人能向我解释一下C#静态变量的用法吗?_C# - Fatal编程技术网

当从另一个脚本访问时,有人能向我解释一下C#静态变量的用法吗?

当从另一个脚本访问时,有人能向我解释一下C#静态变量的用法吗?,c#,C#,记住,我是C#的新手。静态变量似乎不像在C/C++、Fortran等语言中那样起到同样的作用。因此我有点挣扎,尤其是在以下方面: 我希望能够使用inspector将游戏对象附加到变量,但是可以从另一个脚本访问这些变量(比如,文本UI的颜色),而无需硬编码对象名称(可能会更改)和使用Find/GetComponent 如果我将游戏对象设置为静态,我可以使用classname.objectname之类的语句来访问它们。但是,inspector不再看到这些变量(因为它们是静态的?),因此我无法再使用i

记住,我是C#的新手。静态变量似乎不像在C/C++、Fortran等语言中那样起到同样的作用。因此我有点挣扎,尤其是在以下方面:

我希望能够使用inspector将游戏对象附加到变量,但是可以从另一个脚本访问这些变量(比如,文本UI的颜色),而无需硬编码对象名称(可能会更改)和使用Find/GetComponent

如果我将游戏对象设置为静态,我可以使用classname.objectname之类的语句来访问它们。但是,inspector不再看到这些变量(因为它们是静态的?),因此我无法再使用inspector将游戏对象附加到这些变量上,因此我重新使用GameObject.Find或GetComponent,并在代码中的某个位置对名称进行硬编码。希望,我只是对一些事情一无所知,因此我的问题


因此:如何声明一个变量,以便在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,另一个是编译时常量。常量是静态(隐式或显式)通常是一个好主意的一种情况。