Да, вы можете сделать это, используя метод, подобный следующему в вашем классе:
Private Sub SetReadOnlyProperty(ByVal propertyName As String, ByVal [readOnly] As Boolean)
Dim descriptor As PropertyDescriptor = TypeDescriptor.GetProperties([GetType]())(propertyName)
Dim attribute As ReadOnlyAttribute = DirectCast(descriptor.Attributes(GetType(ReadOnlyAttribute)), ReadOnlyAttribute)
Dim fieldToChange As FieldInfo = attribute.[GetType]().GetField("isReadOnly", System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.Instance)
fieldToChange.SetValue(attribute, [readOnly])
End Sub
Примечание. Вам необходимо установить <[ReadOnly]()>
или <ReadOnlyAttribute()>
для каждого свойства в вашем классе на значение по умолчанию, чтобы это работало.