1
1
回答问题1) 假设你有一个汽车物体,它有一个叫做速度的场。如果创建新的汽车对象,然后使用此函数设置速度属性
函数setspeed取决于正在初始化的car对象,因此它可以访问speed属性。因此,如果没有初始化的car setspeed,将无法调用。但是,如果函数是静态的,那么它就不能访问任何特定的初始化car对象,只能访问其他静态定义的对象。 回答问题2) 静态函数不能访问任何实例声明的函数或变量,因此使用静态函数处理实例状态项是没有意义的。 |
2
3
我倾向于将静态方法视为创建与特定类相关的辅助函数的一种方法,这样我就可以全局地使用它们,而不必实例化任何对象。一个非常简单的例子是:
所以在上面的场景中,您可以看到我是否创建了一个Person对象,我可以使用一个只读属性来封装年龄的计算。但是,如果我需要根据日期计算出某人的年龄,而不是特定的Person对象,我可以使用静态方法,即。
|
3
2
静态方法只不过是标记到特定类的全局函数。它们主要在没有多重继承的语言中用作解决方法。 如果您有一个根据半径计算周长的函数,并且在您的项目中需要这个函数,那么您可以创建这样的类:
您可以通过以下方式访问此功能:
这样做的面向对象方法是 不 使用static anything,而不是multiple inherit from geometry_facilities来拉入功能。静态方法主要用于只有一个继承的OO语言,以便于代码重用。 |
4
1
静态类没有实例。加载程序集后,所有静态类中的所有静态方法都将立即对应用程序可用。另一种说法是,不必使用新的运算符创建静态类的实例,就可以使用该类中的方法。 实际上,这意味着您将无法处理静态类中的状态,这本质上使方法不可变,因此线程安全。在静态方法上不会发生线程队列;所有调用都会立即执行。没有对象标识,因为正如您正确指出的,类没有多个实例可用。 扩展方法和实用方法是静态类中静态方法的典型示例。它们通常接受一个对象,对其进行操作,并返回相同或不同类型的新对象或修改后的对象。调用之间不保持任何状态,因为正如一个海报所指出的,由于没有类实例,所以没有地方保存类变量。当方法返回时,方法中为处理目的定义的任何变量都将超出范围(丢失)。 |
5
1
我认为它的措辞很糟糕:与其说“静态数据和函数不管对象发生了什么都不会改变”,不如说,“静态数据和函数不会影响对象特定实例的更改,也不会受到对象特定实例的更改的影响。” 例如,给定一个类,比如…
…一些静态数据和静态方法可能是这样的…
…在这个例子中,静态
我认为“对象标识”和“对象实例”的含义相同:它们是同义词。这个
“是”(在一定程度上),因为所有内容(甚至非实例状态)都必须在某种类型(例如,静态)类中。
一个区别是静态数据始终存在,而实例数据在创建实例之前/之前不存在。静态类类似于单例对象是正确的。
但是,即使需要线程同步,“同步”也不会自动发生(无论是静态的还是单例的),而且在这两种情况下都必须显式地实现(例如,使用
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
i_sniff_ket · 在unity之外使用unity类 2 年前 |