diff options
author | Jon Skeet <skeet@pobox.com> | 2008-08-14 20:38:07 +0100 |
---|---|---|
committer | Jon Skeet <skeet@pobox.com> | 2008-08-14 20:38:07 +0100 |
commit | 0980982095e5fc99a20b627c188d52a8b63248c7 (patch) | |
tree | 1952fd5258f2e548211e6bfb826c2579727bf509 /csharp/ProtocolBuffers/FieldAccess/SingleMessageAccessor.cs | |
parent | 38da52d3490a329be0407438eeddff6da65e5085 (diff) | |
download | protobuf-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.cs | 11 |
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 |