有人可以解释这个 C# static class 属性 吗?
Can someone explain this C# static class property?
我正在尝试将其他人的 C# 代码移植到 Xojo。在class中有如下定义:
static cpCollisionHandler cpCollisionHandlerDefault = new cpCollisionHandler(
cp.WILDCARD_COLLISION_TYPE, cp.WILDCARD_COLLISION_TYPE,
DefaultBegin, DefaultPreSolve, DefaultPostSolve, DefaultSeparate, null
);
我知道这是静态变量,可以从 class 中 return 编辑而无需实例化它。我还了解到它是一个名为 cpCollisionHandlerDefault
的 属性 并且它 return 是 cpCollisionHandler
的一种。我不确定的是,每次从 class 请求 属性 时,这个 return 是否是一个 new cpCollisionHandler
对象还是在第一次访问 属性 时 return 一个新对象,然后对每个后续请求的 cpCollisionHandler
相同的引用?
does this return a new cpCollisionHandler object every time the property is requested from the class
不,程序实例化字段一次,第一次加载 class
does it return a new object the first time the property is accessed and then the same reference to that cpCollisionHandler for each subsequent request?
是的,每个请求都是同一个引用
这实际上不是 属性 而是一个字段,即 class 级别的 "variable"。字段没有像属性那样的 getter 或 setter,但其行为与局部变量完全一样,它们只是具有不同的范围。
cpCollisionHandler 对象是在运行时首次加载 class 时创建的,并且一直存在到应用程序终止或将某个其他值分配给 cpCollisionHandlerDefault 字段。
你有点搞混了。这是一个 cpCollisionHandler 类型的静态变量 cpCollisionHandlerDefault,它由新实例化...静态实例化发生在所有其他代码执行之前,并且该变量可用于整个 运行 应用程序。
这是一个静态字段,而不是 属性。来自 documentation:
A static field identifies exactly one storage location. No matter how many instances of a class are created, there is only ever one copy of a static field.
所以它只被实例化一次,并且每次访问它时不是 return一个新对象。
在 C# 6.0 中, 可以在每次访问静态字段时 return 一个新对象,使用 expression-bodied member:
static cpCollisionHandler cpCollisionHandlerDefault => new cpCollisionHandler(
cp.WILDCARD_COLLISION_TYPE, cp.WILDCARD_COLLISION_TYPE,
DefaultBegin, DefaultPreSolve, DefaultPostSolve, DefaultSeparate, null
);
我正在尝试将其他人的 C# 代码移植到 Xojo。在class中有如下定义:
static cpCollisionHandler cpCollisionHandlerDefault = new cpCollisionHandler(
cp.WILDCARD_COLLISION_TYPE, cp.WILDCARD_COLLISION_TYPE,
DefaultBegin, DefaultPreSolve, DefaultPostSolve, DefaultSeparate, null
);
我知道这是静态变量,可以从 class 中 return 编辑而无需实例化它。我还了解到它是一个名为 cpCollisionHandlerDefault
的 属性 并且它 return 是 cpCollisionHandler
的一种。我不确定的是,每次从 class 请求 属性 时,这个 return 是否是一个 new cpCollisionHandler
对象还是在第一次访问 属性 时 return 一个新对象,然后对每个后续请求的 cpCollisionHandler
相同的引用?
does this return a new cpCollisionHandler object every time the property is requested from the class
不,程序实例化字段一次,第一次加载 class
does it return a new object the first time the property is accessed and then the same reference to that cpCollisionHandler for each subsequent request?
是的,每个请求都是同一个引用
这实际上不是 属性 而是一个字段,即 class 级别的 "variable"。字段没有像属性那样的 getter 或 setter,但其行为与局部变量完全一样,它们只是具有不同的范围。
cpCollisionHandler 对象是在运行时首次加载 class 时创建的,并且一直存在到应用程序终止或将某个其他值分配给 cpCollisionHandlerDefault 字段。
你有点搞混了。这是一个 cpCollisionHandler 类型的静态变量 cpCollisionHandlerDefault,它由新实例化...静态实例化发生在所有其他代码执行之前,并且该变量可用于整个 运行 应用程序。
这是一个静态字段,而不是 属性。来自 documentation:
A static field identifies exactly one storage location. No matter how many instances of a class are created, there is only ever one copy of a static field.
所以它只被实例化一次,并且每次访问它时不是 return一个新对象。
在 C# 6.0 中, 可以在每次访问静态字段时 return 一个新对象,使用 expression-bodied member:
static cpCollisionHandler cpCollisionHandlerDefault => new cpCollisionHandler(
cp.WILDCARD_COLLISION_TYPE, cp.WILDCARD_COLLISION_TYPE,
DefaultBegin, DefaultPreSolve, DefaultPostSolve, DefaultSeparate, null
);