StoredClass and StoredField interfaces

(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).

MetaInfoExample.cs: GetMetaObjectsInfo
01public static void GetMetaObjectsInfo() 02 { 03 IObjectContainer oc = Db4oFactory.OpenFile(YapFileName); 04 try 05 { 06 System.Console.WriteLine("Retrieve meta information for field: "); 07 IStoredClass sc = oc.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 for (int i=0; i< sfields.Length; i++) 14 { 15 System.Console.WriteLine("Stored field: "+ sfields[i].GetName()+"/"+sfields[i].GetStoredType()); 16 } 17 } 18 finally 19 { 20 oc.Close(); 21 } 22 }

MetaInfoExample.vb: GetMetaObjectsInfo
01Public Shared Sub GetMetaObjectsInfo() 02 Dim oc As IObjectContainer = Db4oFactory.OpenFile(YapFileName) 03 Try 04 System.Console.WriteLine("Retrieve meta information for field: ") 05 Dim sc As IStoredClass = oc.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 i As Integer 12 For i = 0 To sfields.Length - 1 Step i + 1 13 System.Console.WriteLine("Stored field: " + sfields(i).GetName() + "/" + sfields(i).GetStoredType().GetName()) 14 Next 15 Finally 16 oc.Close() 17 End Try 18 End Sub