diff options
Diffstat (limited to 'src/mscorlib/shared/System/Runtime/CompilerServices/StrongBox.cs')
-rw-r--r-- | src/mscorlib/shared/System/Runtime/CompilerServices/StrongBox.cs | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/mscorlib/shared/System/Runtime/CompilerServices/StrongBox.cs b/src/mscorlib/shared/System/Runtime/CompilerServices/StrongBox.cs new file mode 100644 index 0000000000..0a1a565f54 --- /dev/null +++ b/src/mscorlib/shared/System/Runtime/CompilerServices/StrongBox.cs @@ -0,0 +1,59 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Runtime.CompilerServices +{ + /// <summary> + /// Holds a reference to a value. + /// </summary> + /// <typeparam name="T">The type of the value that the <see cref = "StrongBox{T}"></see> references.</typeparam> + public class StrongBox<T> : IStrongBox + { + /// <summary> + /// Gets the strongly typed value associated with the <see cref = "StrongBox{T}"></see> + /// <remarks>This is explicitly exposed as a field instead of a property to enable loading the address of the field.</remarks> + /// </summary> + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")] + public T Value; + + /// <summary> + /// Initializes a new StrongBox which can receive a value when used in a reference call. + /// </summary> + public StrongBox() + { + } + + /// <summary> + /// Initializes a new <see cref = "StrongBox{T}"></see> with the specified value. + /// </summary> + /// <param name="value">A value that the <see cref = "StrongBox{T}"></see> will reference.</param> + public StrongBox(T value) + { + Value = value; + } + + object IStrongBox.Value + { + get + { + return Value; + } + set + { + Value = (T)value; + } + } + } + + /// <summary> + /// Defines a property for accessing the value that an object references. + /// </summary> + public interface IStrongBox + { + /// <summary> + /// Gets or sets the value the object references. + /// </summary> + object Value { get; set; } + } +} |