|
@@ -34,6 +34,7 @@
|
|
|
|
|
|
#endregion
|
|
#endregion
|
|
|
|
|
|
|
|
+using System;
|
|
using Google.Protobuf.FieldAccess;
|
|
using Google.Protobuf.FieldAccess;
|
|
|
|
|
|
namespace Google.Protobuf
|
|
namespace Google.Protobuf
|
|
@@ -84,7 +85,7 @@ namespace Google.Protobuf
|
|
/// the implementation class.
|
|
/// the implementation class.
|
|
/// </summary>
|
|
/// </summary>
|
|
/// <typeparam name="T">The message type.</typeparam>
|
|
/// <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>
|
|
/// <summary>
|
|
/// Merges the given message into this one.
|
|
/// Merges the given message into this one.
|
|
@@ -98,8 +99,8 @@ namespace Google.Protobuf
|
|
/// Generic interface for a deeply cloneable type.
|
|
/// Generic interface for a deeply cloneable type.
|
|
/// <summary>
|
|
/// <summary>
|
|
/// <remarks>
|
|
/// <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.
|
|
/// it is simpler to keep this as a separate interface.
|
|
/// </remarks>
|
|
/// </remarks>
|
|
/// <typeparam name="T">The type itself, returned by the <see cref="Clone"/> method.</typeparam>
|
|
/// <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>
|
|
/// <returns>A deep clone of this object.</returns>
|
|
T Clone();
|
|
T Clone();
|
|
}
|
|
}
|
|
-}
|
|
|
|
|
|
+}
|