对象类和对象类别

对象类的每个实例都有一个多值 objectClass 属性,用于标识该对象是哪个类的实例,以及该类派生的所有结构或抽象超级类。 因此,用户对象的 objectClass 属性将标识 toppersonorganizationalPersonuser 类。 objectClass 属性不包括列表中的辅助类。 系统会在创建对象实例时设置 objectClass 值,且该值不可更改。

对象类的每个实例也有一个 objectCategory 属性,这是一个单值属性,其中包含对象实例所属类或其超级类的可分辨名称。 创建对象时,系统会将其 objectCategory 属性设置为其对象类的 defaultObjectCategory 属性指定的值。 对象的 objectCategory 属性不可更改。

有关更多信息,以及检索对象 objectClass 属性的代码示例,请参阅检索 objectClass 属性

重要

在 Windows Server 2008 之前,objectClass 属性没有编制索引。 这是因为它有多个值,而且高度非唯一;也就是说,objectClass 属性的每个实例都包括 top 类。 这意味着索引将非常庞大且效率低下。 要查找给定类中的对象,可使用 objectCategory 属性,该属性为单值且有索引。 有关在搜索筛选器中使用这些属性的详细信息,请参阅决定搜索内容

 

对于大多数类,defaultObjectCategory 是类的 classSchema 对象的可分辨名称。 例如,organizationalUnit 类的 defaultObjectCategory 是“CN=Organizational-Unit,CN=Schema,CN=Configuration,<DC=forestroot>”。 但是,有些类会将另一个类作为其 defaultObjectCategory 来引用。 这样,即使对象的类别不同,查询也能很容易地找到相关的对象组。 例如 userpersonorganizationalPersoncontact 类都在其 defaultObjectCategory 属性中标识了 person 类。 这样,像 (objectCategory=person) 等搜索筛选器只用一次查询就能找到所有这些类的实例。 对人员的查询非常常见,因此这是一个简单的优化。

如果从结构类创建子类,最佳做法是将新类的 defaultObjectCategory 值设置为与超级类相同的可分辨名称。 这样,标准 UI 就能“查找”子类。