Actionscript 3 as3-公共和公共静态之间的区别?

Actionscript 3 as3-公共和公共静态之间的区别?,actionscript-3,Actionscript 3,我听说static可以让其他类访问该类的变量 但是,当您使用public或publicstatic时,会有什么区别呢 难道它们都不允许其他类访问该类的变量吗?已经有一个公认的答案,但不幸的是,几乎在每一点上都是完全错误的。我们不能让人们发现这篇文章而被严重误导。这个答案将试图纠正所有这些错误,以供将来参考 “公众是文件的可视性”。错。Public是一个访问修饰符,它告诉我们如何从外部访问类、成员和方法。这里提到“文件”是错误的 “静态允许访问文件的变量、函数等”。错。static只是一个访问修饰

我听说static可以让其他类访问该类的变量

但是,当您使用public或publicstatic时,会有什么区别呢


难道它们都不允许其他类访问该类的变量吗?

已经有一个公认的答案,但不幸的是,几乎在每一点上都是完全错误的。我们不能让人们发现这篇文章而被严重误导。这个答案将试图纠正所有这些错误,以供将来参考

“公众是文件的可视性”。错。Public是一个访问修饰符,它告诉我们如何从外部访问类、成员和方法。这里提到“文件”是错误的

“静态允许访问文件的变量、函数等”。错。static只是一个访问修饰符,它使变量或方法属于类而不是实例。它对如何访问这些变量/方法没有影响。例如,不能从外部访问静态私有变量。这里再次提到的“文件”是错误的,与此无关

“公开基本上意味着等等……”。让那一个溜走。public是一个访问修饰符,表示可以从外部访问变量/方法

“静态意味着它可以被其他文件使用”。绝对不是。静态的唯一目的是使变量/方法属于类而不是实例。它对外部类/实例如何访问它没有影响。例如,静态私有类不能被任何其他类访问。这里,术语“文件”再次被误用,与编码无关

现在正确的答案是:

类中使用的public表示属于该类实例的变量/方法

类中的公共静态表示属于该类的变量/方法

例如,在具有名为“instanceMethod”的公共方法和名为classMethod的公共静态方法的类a中,您可以如下方式访问它们:

var instance:A = new A();
instance.instanceMethod()//calling an instance method
//the "public function instanceMethod belong to instances of A

A.classMethod()// this is a static public method that only the class itself can call
//trying to do instance.classMethod() would throw an error.
//trying to do A.instanceMethod() would throw an error.
编辑:

要回答你的问题,我们必须谈谈“范围”,但这个问题太大,这里无法回答。我会给你一些快速的指导

术语“范围”在所有编程语言中都使用,它指的是代码中当前引用的对象。在实例方法内部,作用域引用实例本身。在静态方法中,作用域是类本身。在实例方法内部,“this”关键字是隐式的,并引用实例。在静态方法中,没有可以使用的“this”。理论上,您可以创建无限数量的A类实例,每个实例都有自己的“instanceMethod”可调用。另一方面,所有静态属性/方法对于类来说都是唯一的,并且始终只有一个,因为任何给定项目中的所有类都是唯一的

具体示例:数组类。您可以创建如下所示的新阵列:

var myarray:Array = [];
//then use the instance method/property
//those method/property are unique to that instance you just created
myarray.push("hello");
//calling 'push' adds 'hello' to the 'myarray' instance only so 'push' is unique to that instance
//Array class defines also some static property like NUMERIC
myarray.sort(Array.NUMERIC);
//that property NUMERIC is unique to the class and since the class is unique too there's only one Array.NUMERIC that can exist.

如果实例被删除怎么办?实例方法仍然有效吗?同样对于类方法,如果在游戏过程中,某些变量的属性发生了变化,会发生什么。如果该类的实例已删除。该类是否保存了更改的变量,或者在代码上重置为其写入状态?