| File: System\RuntimeFieldHandle.cs | Web Access |
| Project: src\runtime\src\coreclr\nativeaot\System.Private.CoreLib\src\System.Private.CoreLib.csproj (System.Private.CoreLib) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.ComponentModel; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Serialization; using Internal.Metadata.NativeFormat; using Internal.Runtime.Augments; namespace System { [StructLayoutAttribute(LayoutKind.Sequential)] public struct RuntimeFieldHandle : IEquatable<RuntimeFieldHandle>, ISerializable { private IntPtr _value; private RuntimeFieldHandle(IntPtr value) { _value = value; } public IntPtr Value => _value; public override bool Equals(object? obj) { if (!(obj is RuntimeFieldHandle)) return false; return Equals((RuntimeFieldHandle)obj); } public unsafe bool Equals(RuntimeFieldHandle handle) { if (_value == handle._value) return true; if (_value == IntPtr.Zero || handle._value == IntPtr.Zero) return false; FieldHandleInfo* thisInfo = ToFieldHandleInfo(); FieldHandleInfo* thatInfo = handle.ToFieldHandleInfo(); return thisInfo->DeclaringType.Equals(thatInfo->DeclaringType) && thisInfo->Handle.Equals(thatInfo->Handle); } public override unsafe int GetHashCode() { if (_value == IntPtr.Zero) return 0; FieldHandleInfo* info = ToFieldHandleInfo(); int hashcode = info->DeclaringType.GetHashCode(); return (hashcode + int.RotateLeft(hashcode, 13)) ^ info->Handle.GetHashCode(); } public static RuntimeFieldHandle FromIntPtr(IntPtr value) => new RuntimeFieldHandle(value); public static IntPtr ToIntPtr(RuntimeFieldHandle value) => value.Value; public static bool operator ==(RuntimeFieldHandle left, RuntimeFieldHandle right) { return left.Equals(right); } public static bool operator !=(RuntimeFieldHandle left, RuntimeFieldHandle right) { return !left.Equals(right); } [Obsolete(Obsoletions.LegacyFormatterImplMessage, DiagnosticId = Obsoletions.LegacyFormatterImplDiagId, UrlFormat = Obsoletions.SharedUrlFormat)] [EditorBrowsable(EditorBrowsableState.Never)] public void GetObjectData(SerializationInfo info, StreamingContext context) { throw new PlatformNotSupportedException(); } [MethodImpl(MethodImplOptions.AggressiveInlining)] internal readonly unsafe FieldHandleInfo* ToFieldHandleInfo() { return (FieldHandleInfo*)_value; } } [CLSCompliant(false)] [StructLayout(LayoutKind.Sequential)] public struct FieldHandleInfo { public RuntimeTypeHandle DeclaringType; public FieldHandle Handle; } }