c#i可以做:
object foo = null;
如何在对象脚本中执行此操作?
对于简单变量,没有办法设置变量以具有未定义的值。由于缓存对象脚本的键入松散,因此不必为null设置对象引用,因此更改对其他内容的参考值,最常见的字符串,垃圾收集器将清理对象没有主动参考。
出于所有实际目的,将该变量设置为空字符串"就足够了。如果没有,您可以在问题上扩展吗?
缓存对象脚本中的对象属性永远不会解析为未定义的值。如果该值不确定(因为它具有null的SQL值或从未分配了值),则该属性将解析为空字符串的值。如果您希望该属性包含NULL的SQL表示形式,则可以在与该对象相对应的行上进行SQL插入或更新,并将字段设置为NULL。如果将对象的属性设置为空字符串并保存它,则该对象的SQL行将不为空字符串,但将具有空字符串。
基本上,在对象视图中实际上没有对null的抽象表示。SQL null有序列化值,可以在SQL视图中解析为null,而对象视图中的空字符串。
顺便说一句,sql视图中null的序列化值是空字符串,并且空字符串的序列化值为ascii0。
从内存和垃圾收集引用对象擦除变量,您可以使用 kill
命令
Method Test() {
set foo=##class(Obj).%New()
// created object of class Obj. created variable foo pointing to this object.
// do something
set foo=""
// Object of class Obj is now marked for garbage collection
// but variable foo still exist
// do something else
kill foo
// foo is now undefined
// do something else
}
但是,如果您使用ProcedureBlock方法(在新的缓存版本中默认为默认值)或new
命令,则无需。在这种情况下,所有对象引用和变量将在您的方法完成后自动破坏
Method Test() {
set foo=##class(Obj).%New()
// created object of class Obj. created variable foo pointing to this object.
// do something
}
// after method finishes, foo is undefined and object of class Obj is destroyed
如果您只想声明该变量为某些类型,则可以使用#DIM指令。它无能为力,只能帮助工作室确定变量类。有时,如果Studio无法确定课程本身,并且您想使用其内联助手。
Method Test() {
#dim foo as Obj
do ##class(Obj).GenerateSomething(.foo)
write foo.Property
// Studio will provide helper bar for foo properties and methods now
}
所选解决方案绝对不准确。如果您想如示例中所述,将变量设置为null,则如SSH所述。您将:
K VARIABLE
或
KILL VARIABLE