| #region Copyright notice and license |
| // Protocol Buffers - Google's data interchange format |
| // Copyright 2015 Google Inc. All rights reserved. |
| // |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file or at |
| // https://developers.google.com/open-source/licenses/bsd |
| #endregion |
| |
| using System; |
| using System.Reflection; |
| using Google.Protobuf.Compatibility; |
| |
| namespace Google.Protobuf.Reflection |
| { |
| /// <summary> |
| /// Base class for field accessors. |
| /// </summary> |
| internal abstract class FieldAccessorBase : IFieldAccessor |
| { |
| private readonly Func<IMessage, object> getValueDelegate; |
| |
| internal FieldAccessorBase(PropertyInfo property, FieldDescriptor descriptor) |
| { |
| Descriptor = descriptor; |
| getValueDelegate = ReflectionUtil.CreateFuncIMessageObject(property.GetGetMethod()); |
| } |
| |
| public FieldDescriptor Descriptor { get; } |
| |
| public object GetValue(IMessage message) |
| { |
| return getValueDelegate(message); |
| } |
| |
| public abstract bool HasValue(IMessage message); |
| public abstract void Clear(IMessage message); |
| public abstract void SetValue(IMessage message, object value); |
| } |
| } |