aboutsummaryrefslogtreecommitdiff
path: root/csharp/ProtocolBuffers/FieldAccess/SingleMessageAccessor.cs
diff options
context:
space:
mode:
authorJon Skeet <skeet@pobox.com>2008-08-14 20:38:07 +0100
committerJon Skeet <skeet@pobox.com>2008-08-14 20:38:07 +0100
commit0980982095e5fc99a20b627c188d52a8b63248c7 (patch)
tree1952fd5258f2e548211e6bfb826c2579727bf509 /csharp/ProtocolBuffers/FieldAccess/SingleMessageAccessor.cs
parent38da52d3490a329be0407438eeddff6da65e5085 (diff)
downloadprotobuf-0980982095e5fc99a20b627c188d52a8b63248c7.tar.gz
protobuf-0980982095e5fc99a20b627c188d52a8b63248c7.tar.bz2
protobuf-0980982095e5fc99a20b627c188d52a8b63248c7.zip
Evil reflection optimisation.
Diffstat (limited to 'csharp/ProtocolBuffers/FieldAccess/SingleMessageAccessor.cs')
-rw-r--r--csharp/ProtocolBuffers/FieldAccess/SingleMessageAccessor.cs11
1 files changed, 5 insertions, 6 deletions
diff --git a/csharp/ProtocolBuffers/FieldAccess/SingleMessageAccessor.cs b/csharp/ProtocolBuffers/FieldAccess/SingleMessageAccessor.cs
index 460d450d..fd6b5c9b 100644
--- a/csharp/ProtocolBuffers/FieldAccess/SingleMessageAccessor.cs
+++ b/csharp/ProtocolBuffers/FieldAccess/SingleMessageAccessor.cs
@@ -29,15 +29,14 @@ namespace Google.ProtocolBuffers.FieldAccess {
/// in a message type "Foo", a field called "bar" might be of type "Baz". This
/// method is Baz.CreateBuilder.
/// </summary>
- private readonly MethodInfo createBuilderMethod;
+ private readonly CreateBuilderDelegate createBuilderDelegate;
-
- internal SingleMessageAccessor(string name) : base(name) {
-
- createBuilderMethod = ClrType.GetMethod("CreateBuilder", new Type[0]);//BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly);
+ internal SingleMessageAccessor(string name) : base(name) {
+ MethodInfo createBuilderMethod = ClrType.GetMethod("CreateBuilder", new Type[0]);
if (createBuilderMethod == null) {
throw new ArgumentException("No public static CreateBuilder method declared in " + ClrType.Name);
}
+ createBuilderDelegate = ReflectionUtil.CreateStaticUpcastDelegate(createBuilderMethod);
}
/// <summary>
@@ -61,7 +60,7 @@ namespace Google.ProtocolBuffers.FieldAccess {
}
public override IBuilder CreateBuilder() {
- return (IBuilder) createBuilderMethod.Invoke(null, null);
+ return createBuilderDelegate();
}
}
} \ No newline at end of file