# System.Reflection.Emit

``` diff
 namespace System.Reflection.Emit {
     public abstract class AssemblyBuilder : Assembly {
-        protected abstract void SetCustomAttributeCore(ConstructorInfo con, byte[] binaryAttribute);
+        protected abstract void SetCustomAttributeCore(ConstructorInfo con, ReadOnlySpan<byte> binaryAttribute);
-        protected abstract void SetCustomAttributeCore(CustomAttributeBuilder customBuilder);
     }
     public abstract class ConstructorBuilder : ConstructorInfo {
-        protected abstract void SetCustomAttributeCore(ConstructorInfo con, byte[] binaryAttribute);
+        protected abstract void SetCustomAttributeCore(ConstructorInfo con, ReadOnlySpan<byte> binaryAttribute);
-        protected abstract void SetCustomAttributeCore(CustomAttributeBuilder customBuilder);
     }
     public abstract class EnumBuilder : TypeInfo {
-        protected abstract void SetCustomAttributeCore(ConstructorInfo con, byte[] binaryAttribute);
+        protected abstract void SetCustomAttributeCore(ConstructorInfo con, ReadOnlySpan<byte> binaryAttribute);
-        protected abstract void SetCustomAttributeCore(CustomAttributeBuilder customBuilder);
     }
     public abstract class EventBuilder {
-        protected abstract void SetCustomAttributeCore(ConstructorInfo con, byte[] binaryAttribute);
+        protected abstract void SetCustomAttributeCore(ConstructorInfo con, ReadOnlySpan<byte> binaryAttribute);
-        protected abstract void SetCustomAttributeCore(CustomAttributeBuilder customBuilder);
     }
     public abstract class FieldBuilder : FieldInfo {
-        protected abstract void SetCustomAttributeCore(ConstructorInfo con, byte[] binaryAttribute);
+        protected abstract void SetCustomAttributeCore(ConstructorInfo con, ReadOnlySpan<byte> binaryAttribute);
-        protected abstract void SetCustomAttributeCore(CustomAttributeBuilder customBuilder);
     }
     public abstract class GenericTypeParameterBuilder : TypeInfo {
-        protected abstract void SetCustomAttributeCore(ConstructorInfo con, byte[] binaryAttribute);
+        protected abstract void SetCustomAttributeCore(ConstructorInfo con, ReadOnlySpan<byte> binaryAttribute);
-        protected abstract void SetCustomAttributeCore(CustomAttributeBuilder customBuilder);
     }
-    public class ILGenerator {
+    public abstract class ILGenerator {
+        protected ILGenerator();
-        public virtual int ILOffset { get; }
+        public abstract int ILOffset { get; }
-        public virtual void BeginCatchBlock(Type? exceptionType);
+        public abstract void BeginCatchBlock(Type? exceptionType);
-        public virtual void BeginExceptFilterBlock();
+        public abstract void BeginExceptFilterBlock();
-        public virtual Label BeginExceptionBlock();
+        public abstract Label BeginExceptionBlock();
-        public virtual void BeginFaultBlock();
+        public abstract void BeginFaultBlock();
-        public virtual void BeginFinallyBlock();
+        public abstract void BeginFinallyBlock();
-        public virtual void BeginScope();
+        public abstract void BeginScope();
-        public virtual LocalBuilder DeclareLocal(Type localType, bool pinned);
+        public abstract LocalBuilder DeclareLocal(Type localType, bool pinned);
-        public virtual Label DefineLabel();
+        public abstract Label DefineLabel();
-        public virtual void Emit(OpCode opcode);
+        public abstract void Emit(OpCode opcode);
-        public virtual void Emit(OpCode opcode, byte arg);
+        public abstract void Emit(OpCode opcode, byte arg);
-        public virtual void Emit(OpCode opcode, double arg);
+        public abstract void Emit(OpCode opcode, double arg);
-        public virtual void Emit(OpCode opcode, short arg);
+        public abstract void Emit(OpCode opcode, short arg);
-        public virtual void Emit(OpCode opcode, int arg);
+        public abstract void Emit(OpCode opcode, int arg);
-        public virtual void Emit(OpCode opcode, long arg);
+        public abstract void Emit(OpCode opcode, long arg);
-        public virtual void Emit(OpCode opcode, ConstructorInfo con);
+        public abstract void Emit(OpCode opcode, ConstructorInfo con);
-        public virtual void Emit(OpCode opcode, Label label);
+        public abstract void Emit(OpCode opcode, Label label);
-        public virtual void Emit(OpCode opcode, Label[] labels);
+        public abstract void Emit(OpCode opcode, Label[] labels);
-        public virtual void Emit(OpCode opcode, LocalBuilder local);
+        public abstract void Emit(OpCode opcode, LocalBuilder local);
-        public virtual void Emit(OpCode opcode, SignatureHelper signature);
+        public abstract void Emit(OpCode opcode, SignatureHelper signature);
-        public virtual void Emit(OpCode opcode, FieldInfo field);
+        public abstract void Emit(OpCode opcode, FieldInfo field);
-        public virtual void Emit(OpCode opcode, MethodInfo meth);
+        public abstract void Emit(OpCode opcode, MethodInfo meth);
-        public virtual void Emit(OpCode opcode, float arg);
+        public abstract void Emit(OpCode opcode, float arg);
-        public virtual void Emit(OpCode opcode, string str);
+        public abstract void Emit(OpCode opcode, string str);
-        public virtual void Emit(OpCode opcode, Type cls);
+        public abstract void Emit(OpCode opcode, Type cls);
-        public virtual void EmitCall(OpCode opcode, MethodInfo methodInfo, Type[]? optionalParameterTypes);
+        public abstract void EmitCall(OpCode opcode, MethodInfo methodInfo, Type[]? optionalParameterTypes);
-        public virtual void EmitCalli(OpCode opcode, CallingConventions callingConvention, Type? returnType, Type[]? parameterTypes, Type[]? optionalParameterTypes);
+        public abstract void EmitCalli(OpCode opcode, CallingConventions callingConvention, Type? returnType, Type[]? parameterTypes, Type[]? optionalParameterTypes);
-        public virtual void EmitCalli(OpCode opcode, CallingConvention unmanagedCallConv, Type? returnType, Type[]? parameterTypes);
+        public abstract void EmitCalli(OpCode opcode, CallingConvention unmanagedCallConv, Type? returnType, Type[]? parameterTypes);
-        public virtual void EndExceptionBlock();
+        public abstract void EndExceptionBlock();
-        public virtual void EndScope();
+        public abstract void EndScope();
-        public virtual void MarkLabel(Label loc);
+        public abstract void MarkLabel(Label loc);
-        public virtual void UsingNamespace(string usingNamespace);
+        public abstract void UsingNamespace(string usingNamespace);
     }
     public abstract class MethodBuilder : MethodInfo {
-        protected abstract void SetCustomAttributeCore(ConstructorInfo con, byte[] binaryAttribute);
+        protected abstract void SetCustomAttributeCore(ConstructorInfo con, ReadOnlySpan<byte> binaryAttribute);
-        protected abstract void SetCustomAttributeCore(CustomAttributeBuilder customBuilder);
     }
     public abstract class ModuleBuilder : Module {
-        protected abstract void SetCustomAttributeCore(ConstructorInfo con, byte[] binaryAttribute);
+        protected abstract void SetCustomAttributeCore(ConstructorInfo con, ReadOnlySpan<byte> binaryAttribute);
-        protected abstract void SetCustomAttributeCore(CustomAttributeBuilder customBuilder);
     }
-    public class ParameterBuilder {
+    public abstract class ParameterBuilder {
+        protected ParameterBuilder();
+        protected abstract void SetCustomAttributeCore(ConstructorInfo con, ReadOnlySpan<byte> binaryAttribute);
     }
     public abstract class PropertyBuilder : PropertyInfo {
-        protected abstract void SetCustomAttributeCore(ConstructorInfo con, byte[] binaryAttribute);
+        protected abstract void SetCustomAttributeCore(ConstructorInfo con, ReadOnlySpan<byte> binaryAttribute);
-        protected abstract void SetCustomAttributeCore(CustomAttributeBuilder customBuilder);
     }
     public abstract class TypeBuilder : TypeInfo {
-        protected abstract void SetCustomAttributeCore(ConstructorInfo con, byte[] binaryAttribute);
+        protected abstract void SetCustomAttributeCore(ConstructorInfo con, ReadOnlySpan<byte> binaryAttribute);
-        protected abstract void SetCustomAttributeCore(CustomAttributeBuilder customBuilder);
     }
 }
```

