public interface IExtendableMessage<T> : IMessage<T>, IMessage, IEquatable<T>, IDeepCloneable<T> where T : IExtendableMessage<T>
Generic interface for a Protocol Buffers message containing one or more extensions, where the type parameter is expected to be the same type as the implementation class.
This interface is experiemental and is subject to change.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-07 UTC."],[[["\u003cp\u003eThe \u003ccode\u003eIExtendableMessage<T>\u003c/code\u003e interface is a generic interface for Protocol Buffers messages that contain extensions, requiring the type parameter to match the implementing class.\u003c/p\u003e\n"],["\u003cp\u003eThis interface is currently experimental and subject to potential changes in future updates.\u003c/p\u003e\n"],["\u003cp\u003eIt inherits members from \u003ccode\u003eIMessage<T>\u003c/code\u003e, \u003ccode\u003eIMessage\u003c/code\u003e, \u003ccode\u003eIEquatable<T>\u003c/code\u003e, and \u003ccode\u003eIDeepCloneable<T>\u003c/code\u003e, offering functionalities like merging, writing, calculating size, and cloning messages.\u003c/p\u003e\n"],["\u003cp\u003eThe interface provides methods to manage extensions, including getting, setting, clearing, and checking for their presence, as well as offering both \u003ccode\u003eExtension<T, TValue>\u003c/code\u003e and \u003ccode\u003eRepeatedExtension<T, TValue>\u003c/code\u003e types.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003eIExtendableMessage<T>\u003c/code\u003e has been implemented across multiple versions, with version 3.27.1 being the most recent, it can also be found in versions 3.23.0 and 3.15.8.\u003c/p\u003e\n"]]],[],null,["# Interface IExtendableMessage<T> (3.27.1)\n\nVersion latestkeyboard_arrow_down\n\n- [3.27.1 (latest)](/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.IExtendableMessage-1)\n- [3.23.0](/dotnet/docs/reference/Google.Protobuf/3.23.0/Google.Protobuf.IExtendableMessage-1)\n- [3.15.8](/dotnet/docs/reference/Google.Protobuf/3.15.8/Google.Protobuf.IExtendableMessage-1) \n\n public interface IExtendableMessage\u003cT\u003e : IMessage\u003cT\u003e, IMessage, IEquatable\u003cT\u003e, IDeepCloneable\u003cT\u003e where T : IExtendableMessage\u003cT\u003e\n\nGeneric interface for a Protocol Buffers message containing one or more extensions, where the type parameter is expected to be the same type as the implementation class.\nThis interface is experiemental and is subject to change. \n\nInherited Members\n-----------------\n\n[IMessage\\\u003cT\\\u003e.MergeFrom(T)](/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.IMessage-1#Google_Protobuf_IMessage_1_MergeFrom__0_) \n[IMessage.MergeFrom(CodedInputStream)](/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.IMessage#Google_Protobuf_IMessage_MergeFrom_Google_Protobuf_CodedInputStream_) \n[IMessage.WriteTo(CodedOutputStream)](/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.IMessage#Google_Protobuf_IMessage_WriteTo_Google_Protobuf_CodedOutputStream_) \n[IMessage.CalculateSize()](/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.IMessage#Google_Protobuf_IMessage_CalculateSize) \n[IMessage.Descriptor](/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.IMessage#Google_Protobuf_IMessage_Descriptor) \n[IEquatable\\\u003cT\\\u003e.Equals(T)](https://learn.microsoft.com/dotnet/api/system.iequatable-1.equals) \n[IDeepCloneable\\\u003cT\\\u003e.Clone()](/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.IDeepCloneable-1#Google_Protobuf_IDeepCloneable_1_Clone)\n\nNamespace\n---------\n\n[Google.Protobuf](/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf)\n\nAssembly\n--------\n\nGoogle.Protobuf.dll\n\nMethods\n-------\n\n### ClearExtension\\\u003cTValue\\\u003e(Extension\\\u003cT, TValue\\\u003e)\n\n void ClearExtension\u003cTValue\u003e(Extension\u003cT, TValue\u003e extension)\n\nClears the value of the specified extension\n\n### ClearExtension\\\u003cTValue\\\u003e(RepeatedExtension\\\u003cT, TValue\\\u003e)\n\n void ClearExtension\u003cTValue\u003e(RepeatedExtension\u003cT, TValue\u003e extension)\n\nClears the value of the specified repeated extension\n\n### GetExtension\\\u003cTValue\\\u003e(Extension\\\u003cT, TValue\\\u003e)\n\n TValue GetExtension\u003cTValue\u003e(Extension\u003cT, TValue\u003e extension)\n\nGets the value of the specified extension\n\n### GetExtension\\\u003cTValue\\\u003e(RepeatedExtension\\\u003cT, TValue\\\u003e)\n\n RepeatedField\u003cTValue\u003e GetExtension\u003cTValue\u003e(RepeatedExtension\u003cT, TValue\u003e extension)\n\nGets the value of the specified repeated extension or null if the extension isn't registered in this set.\nFor a version of this method that never returns null, use [GetOrInitializeExtension\\\u003cTValue\\\u003e(RepeatedExtension\\\u003cT, TValue\\\u003e)](/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.IExtendableMessage-1#Google_Protobuf_IExtendableMessage_1_GetOrInitializeExtension__1_Google_Protobuf_RepeatedExtension__0___0__)\n\n### GetOrInitializeExtension\\\u003cTValue\\\u003e(RepeatedExtension\\\u003cT, TValue\\\u003e)\n\n RepeatedField\u003cTValue\u003e GetOrInitializeExtension\u003cTValue\u003e(RepeatedExtension\u003cT, TValue\u003e extension)\n\nGets the value of the specified repeated extension, registering it if it hasn't already been registered.\n\n### HasExtension\\\u003cTValue\\\u003e(Extension\\\u003cT, TValue\\\u003e)\n\n bool HasExtension\u003cTValue\u003e(Extension\u003cT, TValue\u003e extension)\n\nGets whether the value of the specified extension is set\n\n### SetExtension\\\u003cTValue\\\u003e(Extension\\\u003cT, TValue\\\u003e, TValue)\n\n void SetExtension\u003cTValue\u003e(Extension\u003cT, TValue\u003e extension, TValue value)\n\nSets the value of the specified extension\n\nExtension Methods\n-----------------\n\n[MessageExtensions.IsInitialized(IMessage)](/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.MessageExtensions#Google_Protobuf_MessageExtensions_IsInitialized_Google_Protobuf_IMessage_) \n[MessageExtensions.MergeDelimitedFrom(IMessage, Stream)](/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.MessageExtensions#Google_Protobuf_MessageExtensions_MergeDelimitedFrom_Google_Protobuf_IMessage_System_IO_Stream_) \n[MessageExtensions.MergeFrom(IMessage, ByteString)](/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.MessageExtensions#Google_Protobuf_MessageExtensions_MergeFrom_Google_Protobuf_IMessage_Google_Protobuf_ByteString_) \n[MessageExtensions.MergeFrom(IMessage, ReadOnlySequence\\\u003cbyte\\\u003e)](/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.MessageExtensions#Google_Protobuf_MessageExtensions_MergeFrom_Google_Protobuf_IMessage_System_Buffers_ReadOnlySequence_System_Byte__) \n[MessageExtensions.MergeFrom(IMessage, byte\\[\\])](/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.MessageExtensions#Google_Protobuf_MessageExtensions_MergeFrom_Google_Protobuf_IMessage_System_Byte___) \n[MessageExtensions.MergeFrom(IMessage, byte\\[\\], int, int)](/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.MessageExtensions#Google_Protobuf_MessageExtensions_MergeFrom_Google_Protobuf_IMessage_System_Byte___System_Int32_System_Int32_) \n[MessageExtensions.MergeFrom(IMessage, Stream)](/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.MessageExtensions#Google_Protobuf_MessageExtensions_MergeFrom_Google_Protobuf_IMessage_System_IO_Stream_) \n[MessageExtensions.MergeFrom(IMessage, ReadOnlySpan\\\u003cbyte\\\u003e)](/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.MessageExtensions#Google_Protobuf_MessageExtensions_MergeFrom_Google_Protobuf_IMessage_System_ReadOnlySpan_System_Byte__) \n[MessageExtensions.ToByteArray(IMessage)](/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.MessageExtensions#Google_Protobuf_MessageExtensions_ToByteArray_Google_Protobuf_IMessage_) \n[MessageExtensions.ToByteString(IMessage)](/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.MessageExtensions#Google_Protobuf_MessageExtensions_ToByteString_Google_Protobuf_IMessage_) \n[MessageExtensions.WriteDelimitedTo(IMessage, Stream)](/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.MessageExtensions#Google_Protobuf_MessageExtensions_WriteDelimitedTo_Google_Protobuf_IMessage_System_IO_Stream_) \n[MessageExtensions.WriteTo(IMessage, IBufferWriter\\\u003cbyte\\\u003e)](/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.MessageExtensions#Google_Protobuf_MessageExtensions_WriteTo_Google_Protobuf_IMessage_System_Buffers_IBufferWriter_System_Byte__) \n[MessageExtensions.WriteTo(IMessage, Stream)](/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.MessageExtensions#Google_Protobuf_MessageExtensions_WriteTo_Google_Protobuf_IMessage_System_IO_Stream_) \n[MessageExtensions.WriteTo(IMessage, Span\\\u003cbyte\\\u003e)](/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.MessageExtensions#Google_Protobuf_MessageExtensions_WriteTo_Google_Protobuf_IMessage_System_Span_System_Byte__)"]]