(IStoredClass and IStoredField in .NET)
Let's look closer at the class meta-information interfaces.
They look quite similar to reflection API, but unlike reflection there is no information about methods and constructors.
You can only use StoredClass to get the class's fields:
c#: IStoredClass#GetStoredFields()
VB: IStoredClass#GetStoredFields()
returns all stored fields of this stored class.
c#: IStoredClass#StoredField(name, type)
VB: IStoredClass#StoredField(name, type)
returns an existing stored field of this stored class.
You can also use this interface to explore classes hierarchy.
c#: IStoredClass#GetParentStoredClass
VB: IStoredClass#GetParentStoredClass
returns the parent of the class.
StoredField interface gives you access to various meta-field information, such as field name, field type. It also provides some helpful methods for manipulating fields accepting their object as a variable (see db4o API for more information).
01private static void GetMetaObjectsInfo() 02
{ 03
IObjectContainer container = Db4oFactory.OpenFile(Db4oFileName); 04
try 05
{ 06
System.Console.WriteLine("Retrieve meta information for field: "); 07
IStoredClass sc = container.Ext().StoredClass(typeof(Car)); 08
IStoredField sf = sc.StoredField("_pilot",typeof(Pilot)); 09
System.Console.WriteLine("Field info: "+ sf.GetName()+"/"+sf.GetStoredType()+"/IsArray="+sf.IsArray()); 10
11
System.Console.WriteLine("Retrieve all fields: "); 12
IStoredField[] sfields = sc.GetStoredFields(); 13
foreach (IStoredField sfield in sfields) 14
{ 15
System.Console.WriteLine("Stored field: " + sfield.GetName() + "/" + sfield.GetStoredType()); 16
} 17
} 18
finally 19
{ 20
container.Close(); 21
} 22
}
01Private Shared Sub GetMetaObjectsInfo() 02
Dim container As IObjectContainer = Db4oFactory.OpenFile(Db4oFileName) 03
Try 04
System.Console.WriteLine("Retrieve meta information for field: ") 05
Dim sc As IStoredClass = container.Ext().StoredClass(GetType(Car)) 06
Dim sf As IStoredField = sc.StoredField("_pilot", GetType(Pilot)) 07
System.Console.WriteLine("Field info: " + sf.GetName() + "/" + sf.GetStoredType().GetName() + "/IsArray=" + sf.IsArray().ToString()) 08
09
System.Console.WriteLine("Retrieve all fields: ") 10
Dim sfields() As IStoredField = sc.GetStoredFields() 11
Dim sfield As IStoredField 12
For Each sfield In sfields 13
System.Console.WriteLine("Stored field: " + sfield.GetName() + "/" + sfield.GetStoredType().GetName()) 14
Next 15
Finally 16
container.Close() 17
End Try 18
End Sub