parent
ec8c395517
commit
007f859664
1 changed files with 38 additions and 0 deletions
@ -0,0 +1,38 @@ |
||||
Readme for the C#/.NET implementation of Protocol Buffers |
||||
|
||||
Copyright 2008 Google Inc. |
||||
http://code.google.com/apis/protocolbuffers/ |
||||
and |
||||
http://github.com/jskeet/dotnet-protobufs |
||||
|
||||
(This will eventually be written up into a full tutorial etc.) |
||||
|
||||
Differences with respect to the Java API |
||||
---------------------------------------- |
||||
|
||||
Many of the changes are obvious "making it more like .NET", but |
||||
others are more subtle. |
||||
|
||||
o Properties and indexers are used reasonably extensively. |
||||
o newFoo becomes CreateFoo everywhere. |
||||
o Classes are broken up much more - for instance, there are |
||||
namespaces for descriptors and field accessors, just to make it |
||||
easier to see what's going on. |
||||
o There's a mixture of generic and non-generic code. This |
||||
is interesting (at least if you're a language nerd). Java's generics |
||||
are somewhat different to those of .NET, partly due to type erasure |
||||
but in other ways too. .NET allows types to be overloaded by the |
||||
number of generic parameters, but there's no such thing as the |
||||
"raw" type of a generic type. Combining these two facts, I've |
||||
ended up with two interfaces for messages, and two for builders - |
||||
in each case, a non-generic one and a generic one which derives |
||||
from the generic one. Where the members clash (e.g. IBuilder.Build |
||||
and IBuilder<TMessage>.Build vary only by return type) the |
||||
implementations use explicit interface implementation to provide |
||||
the most useful method in most cases. This is very much like |
||||
the normal implementation of IEnumerable<T> which extends |
||||
IEnumerable. As an aside, this becomes a pain when trying to |
||||
create "the read-only version of this list, whose type I don't |
||||
know but I know it's a List<something>". Oh for mumble types. |
||||
|
||||
|
Loading…
Reference in new issue