diff --git a/src/mscorlib/src/System/Text/ASCIIEncoding.cs b/src/mscorlib/src/System/Text/ASCIIEncoding.cs index 307e4899b706..34b04a0a60ab 100644 --- a/src/mscorlib/src/System/Text/ASCIIEncoding.cs +++ b/src/mscorlib/src/System/Text/ASCIIEncoding.cs @@ -23,9 +23,13 @@ namespace System.Text [Serializable] public class ASCIIEncoding : Encoding { + // Allow for devirtualization (see https://github.com/dotnet/coreclr/pull/9230) + [Serializable] + internal sealed class ASCIIEncodingSealed : ASCIIEncoding { } + // Used by Encoding.ASCII for lazy initialization // The initialization code will not be run until a static member of the class is referenced - internal static readonly ASCIIEncoding s_default = new ASCIIEncoding(); + internal static readonly ASCIIEncodingSealed s_default = new ASCIIEncodingSealed(); public ASCIIEncoding() : base(Encoding.CodePageASCII) { diff --git a/src/mscorlib/src/System/Text/UTF8Encoding.cs b/src/mscorlib/src/System/Text/UTF8Encoding.cs index b2cc462027f8..65d9bf9d5e1e 100644 --- a/src/mscorlib/src/System/Text/UTF8Encoding.cs +++ b/src/mscorlib/src/System/Text/UTF8Encoding.cs @@ -53,9 +53,16 @@ public class UTF8Encoding : Encoding private const int UTF8_CODEPAGE = 65001; + // Allow for devirtualization (see https://github.com/dotnet/coreclr/pull/9230) + [Serializable] + internal sealed class UTF8EncodingSealed : UTF8Encoding + { + public UTF8EncodingSealed() : base(encoderShouldEmitUTF8Identifier: true) { } + } + // Used by Encoding.UTF8 for lazy initialization // The initialization code will not be run until a static member of the class is referenced - internal static readonly UTF8Encoding s_default = new UTF8Encoding(encoderShouldEmitUTF8Identifier: true); + internal static readonly UTF8EncodingSealed s_default = new UTF8EncodingSealed(); // Yes, the idea of emitting U+FEFF as a UTF-8 identifier has made it into // the standard.