文章
· 八月 5, 2021 阅读大约需 3 分钟

方法关键字GenerateAfter,Internal,Language,NotInheritable

第六十五章 方法关键字 - GenerateAfter

指定何时生成此方法。仅当方法是方法生成器时适用。

用法

要指定在生成其他方法后调用此方法的生成器,请使用以下语法:

Method name(formal_spec) As returnclass [ CodeMode = ObjectGenerator, GenerateAfter = methodlist ] 
{    //implementation } 

其中methodlist是单个方法名或用逗号分隔的方法名列表,用括号括起来。

详解

在方法生成器方法的情况下,指定生成器应在生成列出的方法后调用。当需要控制方法生成器的调用顺序时,此关键字非常有用。

第六十六章 方法关键字 - Internal

指定此方法定义是否是内部的(不显示在类文档中)。

用法

要指定此方法是内部的,请使用以下语法:

Method name(formal_spec) As returnclass [ Internal ] 
{    //implementation }

否则,省略此关键字或将单词Not放在关键字的前面。

详解

内部类成员不会显示在类文档中。如果想让用户看到一个类,但不看到它的所有成员,这个关键字很有用。

第六十七章 方法关键字 - Language

指定用于实现此方法的语言。

用法

要指定用于实现方法的语言,请使用以下语法:

Method name(formal_spec) As returnclass [ Language = language ] 
{    //implementation }

其中language是下列之一:

  • objectscript (默认) — ObjectScript

  • ispl — Informix存储过程语言

  • tsql — Transact-SQL

详解

此关键字指定用于实现此方法的语言。

ispltsql仅支持类方法。

如果指定ispl的值,则方法的主体仅限于单个CREATE PROCEDURE语句。

默认

如果省略此关键字,将使用类级语言关键字指定的语言。

注意:不能在类级别指定Language = ispl只能将此值用于方法。

注意:除了ObjectScript之外,不能使用任何其他语言实现分片类的方法。

示例

Class User.Person Extends %Persistent
{

Property Name As %String;

Property Gender As %String;

/// An ObjectScript instance method that writes the name and gender of a person
Method Print() As %Status [ Language = objectscript ]
{
   write !, ..Name, " is a ", ..Gender
}

/// A TSQL class method that inserts a row into the Person table
ClassMethod TSQLTest() As %Status [ Language = tsql ]
{
   INSERT INTO Person (Name, Gender) VALUES ('Manon', 'Female')
}

/// An ISPL class method that creates an stored procedure named IsplSp
ClassMethod ISPLTest() As %Status [ Language = ispl ]
{
   CREATE PROCEDURE IsplSp()
      INSERT INTO Person (Name, Gender) VALUES ('Nikolai', 'Male')
   END PROCEDURE
}

}

第六十八章 方法关键字 - NotInheritable

指定此方法是否可以在子类中继承。

用法

要指定此方法不能在子类中继承,请使用以下语法:

Method name(formal_spec) As returnclass [ NotInheritable ] 
{    //implementation }

详解

此关键字指定此方法不能在子类中继承。

重要:虽然让一个成员不能被它的子类继承在某些情况下非常有用,但是关键字应该很少被明智地使用,因为它破坏了继承契约。

默认

如果省略此关键字,此方法是可继承的。

讨论 (0)1
登录或注册以继续