Automatic properties simply allow a user to skip the step of introducing private field variables when the property simply sets and gets the field value:
class Person
{
public string Name { get; set; }
}
Public Class Person
Public Property Name() As String
End Class
Behind the scenes the compiler creates a field and the regular property code. The field-name depends on the compiler. For C# the field-name of auto-property is <PropertyName>k__BackingField. For example the property FirstName will be stored in the field <FirstName>k__BackingField. For VB.Net the field-name of auto-property is _PropertyName. For example the property FirstName will be stored in the field _FirstName.
public class Person
{
// the name is actually <Name>k__BackingField
// but you cannot express that in C# code
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
Public Class Person
Private _Name As String
Public Property Name() As String
Get
Return _Name
End Get
Set(ByVal value As String)
_Name = value
End Set
End Property
End Class
Note that db4o always uses the field name for its configuration. This also applies to auto-properties. You need to use the field-name to specify index etc.
For C# the name of the backing field is not specified and a compiler implementation detail. Therefore it's possible that it actually changes in the future.
For example to index the auto property Name:
IEmbeddedConfiguration configuration = Db4oEmbedded.NewConfiguration();
configuration.Common.ObjectClass(typeof(Person)).ObjectField("<Name>k__BackingField").Indexed(true);
Dim configuration As IEmbeddedConfiguration = Db4oEmbedded.NewConfiguration()
configuration.Common.ObjectClass(GetType(Person)).ObjectField("_Name").Indexed(True)