ClassWithId
Class information that references another class record's metadata.
using System.Collections.Generic;
using System.IO;
using System.Runtime.CompilerServices;
using System.Runtime.Serialization;
namespace System.Private.Windows.BinaryFormat.Serializer
{
[NullableContext(1)]
[Nullable(0)]
internal sealed class ClassWithId : ClassRecord, IRecord<ClassWithId>, IRecord
{
private readonly ClassRecord _metadataClass;
public override Id ObjectId { get; }
public override Id LibraryId { get; }
public Id MetadataId { get; }
public static RecordType RecordType => RecordType.ClassWithId;
public ClassWithId(Id id, ClassRecord metadataClass, [Nullable(new byte[] {
1,
2
})] IReadOnlyList<object> memberValues)
: base(metadataClass.ClassInfo, metadataClass.MemberTypeInfo, memberValues)
{
ObjectId = id;
MetadataId = metadataClass.ObjectId;
LibraryId = metadataClass.LibraryId;
_metadataClass = metadataClass;
}
public ClassWithId(Id id, ClassRecord metadataClass, [Nullable(new byte[] {
1,
2
})] params object[] memberValues)
: this(id, metadataClass, (IReadOnlyList<object>)memberValues)
{
}
private protected override void Write(BinaryWriter writer)
{
writer.Write((byte)RecordType);
writer.Write(ObjectId);
writer.Write(MetadataId);
ClassRecord metadataClass = _metadataClass;
ClassWithMembersAndTypes classWithMembersAndTypes = metadataClass as ClassWithMembersAndTypes;
if (classWithMembersAndTypes == null) {
SystemClassWithMembersAndTypes systemClassWithMembersAndTypes = metadataClass as SystemClassWithMembersAndTypes;
if (systemClassWithMembersAndTypes == null)
throw new SerializationException();
ClassRecord.WriteValuesFromMemberTypeInfo(writer, systemClassWithMembersAndTypes.MemberTypeInfo, base.MemberValues);
} else
ClassRecord.WriteValuesFromMemberTypeInfo(writer, classWithMembersAndTypes.MemberTypeInfo, base.MemberValues);
}
public static implicit operator Id(ClassWithId value)
{
return value.MetadataId;
}
}
}