private CodeMemberProperty GenerateGetSetProperty(
CodeTypeDeclaration owningClass,
string name,
Type type,
MemberAttributes attributes,
bool useBaseProperty = false) {
// generate the property
var prop = new CodeMemberProperty();
prop.Name = name;
prop.Type = new CodeTypeReference(type);
prop.Attributes = attributes;
if (useBaseProperty) {
prop.GetStatements.Add(
new CodeMethodReturnStatement(CodeHelpers.BaseProperty(name)));
prop.SetStatements.Add(
new CodeAssignStatement(
CodeHelpers.BaseProperty(name),
new CodePropertySetValueReferenceExpression()));
}
else {
// generate the backing field for this property
var backingField = new CodeMemberField();
backingField.Name = "backing" + name;
backingField.Type = new CodeTypeReference(type);
owningClass.Members.Add(backingField);
prop.GetStatements.Add(
new CodeMethodReturnStatement(CodeHelpers.ThisField(backingField.Name)));
prop.SetStatements.Add(
new CodeAssignStatement(
CodeHelpers.ThisField(backingField.Name),
new CodePropertySetValueReferenceExpression()));
}
owningClass.Members.Add(prop);
return prop;
}
}