diff --git a/src/CodeGenHelpers/PropertyBuilder.cs b/src/CodeGenHelpers/PropertyBuilder.cs index 5f69e68..2f78f60 100644 --- a/src/CodeGenHelpers/PropertyBuilder.cs +++ b/src/CodeGenHelpers/PropertyBuilder.cs @@ -23,6 +23,8 @@ internal enum FieldType private string _value; private string _safeValue; private bool _getOnly; + private bool _virtual; + private bool _override; private Accessibility? _setterAccessibility; private readonly List _attributes = new List(); private readonly DocumentationComment _xmlDoc = new DocumentationComment(); @@ -114,6 +116,12 @@ public PropertyBuilder WithAccessModifier(Accessibility accessModifier) AccessModifier = accessModifier; return this; } + + public PropertyBuilder Override(bool @override = true) + { + _override = true; + return this; + } public PropertyBuilder MakeStatic() { @@ -122,6 +130,12 @@ public PropertyBuilder MakeStatic() return this; } + public PropertyBuilder MakeVirtualProperty() + { + _virtual = true; + return this; + } + public PropertyBuilder AddAttribute(string attribute) { var sanitized = attribute.Replace("[", string.Empty).Replace("]", string.Empty); @@ -216,11 +230,19 @@ void IBuilder.Write(ref CodeWriter writer) var type = Type.Trim(); var name = Name.Trim(); + string additionalModifier = null; + if (_virtual) + additionalModifier = "virtual"; + else if (_override) + additionalModifier = "override"; + var output = (FieldTypeValue switch { FieldType.Const => $"{AccessModifier.Code()} const {type} {name}", FieldType.ReadOnly => $"{AccessModifier.Code()} readonly {type} {name}", - _ => $"{AccessModifier.Code()} {type} {name}" + _ => additionalModifier is null + ? $"{AccessModifier.Code()} {type} {name}" + : $"{AccessModifier.Code()} {additionalModifier} {type} {name}" }).Trim(); if(FieldTypeValue != FieldType.Property)