diff options
-rw-r--r-- | csharp/src/ProtocolBuffers/IMessage.cs | 9 | ||||
-rw-r--r-- | src/google/protobuf/compiler/csharp/csharp_message.cc | 2 |
2 files changed, 6 insertions, 5 deletions
diff --git a/csharp/src/ProtocolBuffers/IMessage.cs b/csharp/src/ProtocolBuffers/IMessage.cs index 32dfcaff..5d662cfd 100644 --- a/csharp/src/ProtocolBuffers/IMessage.cs +++ b/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();
}
-}
\ No newline at end of file +}
diff --git a/src/google/protobuf/compiler/csharp/csharp_message.cc b/src/google/protobuf/compiler/csharp/csharp_message.cc index 32d0a82d..39938fa3 100644 --- a/src/google/protobuf/compiler/csharp/csharp_message.cc +++ b/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 |