Browse Source

Implement requested changes for IMessage<T>

1) New line at end of file
2) Make IMessage<T> itself extend IEquatable<T> and IDeepCloneable<T>
Jon Skeet 10 năm trước cách đây
mục cha
commit
8c896b259e

+ 5 - 4
csharp/src/ProtocolBuffers/IMessage.cs

@@ -34,6 +34,7 @@
 
 #endregion
 
+using System;
 using Google.Protobuf.FieldAccess;
 
 namespace Google.Protobuf
@@ -84,7 +85,7 @@ namespace Google.Protobuf
     /// the implementation class.
     /// </summary>
     /// <typeparam name="T">The message type.</typeparam>
-    public interface IMessage<T> : IMessage where T : IMessage<T>
+    public interface IMessage<T> : IMessage, IEquatable<T>, IDeepCloneable<T> where T : IMessage<T>
     {
         /// <summary>
         /// Merges the given message into this one.
@@ -98,8 +99,8 @@ namespace Google.Protobuf
     /// Generic interface for a deeply cloneable type.
     /// <summary>
     /// <remarks>
-    /// In practice, all generated messages implement this interface.
-    /// However, due to the type constraint on <c>T</c> in <see cref="IMessage{T}"/>,
+    /// All generated messages implement this interface, but so do some non-message types.
+    /// Additionally, due to the type constraint on <c>T</c> in <see cref="IMessage{T}"/>,
     /// it is simpler to keep this as a separate interface.
     /// </remarks>
     /// <typeparam name="T">The type itself, returned by the <see cref="Clone"/> method.</typeparam>
@@ -111,4 +112,4 @@ namespace Google.Protobuf
         /// <returns>A deep clone of this object.</returns>
         T Clone();
     }
-}
+}

+ 1 - 1
src/google/protobuf/compiler/csharp/csharp_message.cc

@@ -179,7 +179,7 @@ void MessageGenerator::Generate(io::Printer* printer) {
   WriteGeneratedCodeAttributes(printer);
   printer->Print(
     vars,
-    "$access_level$ sealed partial class $class_name$ : pb::IMessage<$class_name$>, global::System.IEquatable<$class_name$>, pb::IDeepCloneable<$class_name$> {\n");
+    "$access_level$ sealed partial class $class_name$ : pb::IMessage<$class_name$> {\n");
   printer->Indent();
 
   // All static fields and properties