对于无法单独实例化的类的术语是什么?

时间:2015-08-11 14:37:38

标签: vba

例如,只需使用" New"即可创建字典对象。关键字:

Role

但"排序"需要使用工作表属性添加类:

 Dim dic as Scripting.Dictionary
 Set dic = New Scripting.Dictionary

当使用新关键字尝试在上面的示例中错误地实例化srt对象时,Intellisense不会将Excel.Sort显示为选项,这也很有趣。但是,如果使用新关键字错误地实例化新工作簿对象,则Intellisense会将Excel.Workbook显示为选项。

2 个答案:

答案 0 :(得分:2)

该术语称为"noncreatable"。这是您可以添加到coclass

定义的属性
[
  coclass-attribute-list, 
    noncreatable
]
coclass coclass-name
{
  coclass-interface-list
}

正如上面提到的文档所述,它用于创建无法使用CreateInstance()CoCreateInstance()自行实例化的COM类(在VBA中,这转换为CreateObject(),调用这两个函数之一)。但您仍然可以获得对现有COM对象的引用,如上所示:

Set srt = Activesheet.sort

答案 1 :(得分:2)

我记得,这个词是PublicNotCreatable

这是一个很好的链接:http://www.cpearson.com/excel/classes.aspx(请参阅“类的实例化属性”一节)。

如果您已经创建了一个类模块,那么在“属性”窗口中,您可以将实例化从Private(默认值)更改为PublicNotCreatable,您将获得此行为。

通常,您在另一个类上提供工厂方法,允许您的库用户在受控环境下创建这些类的实例。或者当然,如果这就是你想要的,你可以阻止你的图书馆用户创建它们。