diff options
author | Jon Skeet <skeet@pobox.com> | 2008-08-14 20:37:12 +0100 |
---|---|---|
committer | Jon Skeet <skeet@pobox.com> | 2008-08-14 20:37:12 +0100 |
commit | 272d384f6ad064756edc8d9778c5bcf667783821 (patch) | |
tree | eed1435ff63c89a52e426df79323a9b1c1bef24a /csharp/ProtocolBuffers/GeneratedMessage.cs | |
parent | db9d2fcd06bd8604f2ff9f30489640f64c70c4cb (diff) | |
download | protobuf-272d384f6ad064756edc8d9778c5bcf667783821.tar.gz protobuf-272d384f6ad064756edc8d9778c5bcf667783821.tar.bz2 protobuf-272d384f6ad064756edc8d9778c5bcf667783821.zip |
Use delegates instead of dynamic reflection.
Diffstat (limited to 'csharp/ProtocolBuffers/GeneratedMessage.cs')
-rw-r--r-- | csharp/ProtocolBuffers/GeneratedMessage.cs | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/csharp/ProtocolBuffers/GeneratedMessage.cs b/csharp/ProtocolBuffers/GeneratedMessage.cs index 479986f6..0fd54f6c 100644 --- a/csharp/ProtocolBuffers/GeneratedMessage.cs +++ b/csharp/ProtocolBuffers/GeneratedMessage.cs @@ -33,11 +33,16 @@ namespace Google.ProtocolBuffers { private UnknownFieldSet unknownFields = UnknownFieldSet.DefaultInstance; - internal FieldAccessorTable FieldAccesseorsFromBuilder { + /// <summary> + /// Returns the message as a TMessage. + /// </summary> + protected abstract TMessage ThisMessage { get; } + + internal FieldAccessorTable<TMessage, TBuilder> FieldAccessorsFromBuilder { get { return InternalFieldAccessors; } } - protected abstract FieldAccessorTable InternalFieldAccessors { get; } + protected abstract FieldAccessorTable<TMessage, TBuilder> InternalFieldAccessors { get; } public override MessageDescriptor DescriptorForType { get { return InternalFieldAccessors.Descriptor; } @@ -49,13 +54,13 @@ namespace Google.ProtocolBuffers { var ret = new SortedList<FieldDescriptor, object>(); MessageDescriptor descriptor = DescriptorForType; foreach (FieldDescriptor field in descriptor.Fields) { - IFieldAccessor accessor = InternalFieldAccessors[field]; + IFieldAccessor<TMessage, TBuilder> accessor = InternalFieldAccessors[field]; if (field.IsRepeated) { - if (accessor.GetRepeatedCount(this) != 0) { - ret[field] = accessor.GetValue(this); + if (accessor.GetRepeatedCount(ThisMessage) != 0) { + ret[field] = accessor.GetValue(ThisMessage); } } else if (HasField(field)) { - ret[field] = accessor.GetValue(this); + ret[field] = accessor.GetValue(ThisMessage); } } return ret; @@ -99,11 +104,11 @@ namespace Google.ProtocolBuffers { } public override bool HasField(FieldDescriptor field) { - return InternalFieldAccessors[field].Has(this); + return InternalFieldAccessors[field].Has(ThisMessage); } public override int GetRepeatedFieldCount(FieldDescriptor field) { - return InternalFieldAccessors[field].GetRepeatedCount(this); + return InternalFieldAccessors[field].GetRepeatedCount(ThisMessage); } public override object this[FieldDescriptor field, int index] { @@ -111,7 +116,7 @@ namespace Google.ProtocolBuffers { } public override object this[FieldDescriptor field] { - get { return InternalFieldAccessors[field].GetValue(this); } + get { return InternalFieldAccessors[field].GetValue(ThisMessage); } } public override UnknownFieldSet UnknownFields { |