PageRenderTime 35ms CodeModel.GetById 27ms app.highlight 6ms RepoModel.GetById 0ms app.codeStats 0ms

/mcs/class/dlr/Runtime/Microsoft.Scripting.Core/Actions/DeleteMemberBinder.cs

https://github.com/ambroff/mono
C# | 102 lines | 39 code | 14 blank | 49 comment | 3 complexity | ef761dbee1f78198d67fbbd1f6078b91 MD5 | raw file
  1/* ****************************************************************************
  2 *
  3 * Copyright (c) Microsoft Corporation. 
  4 *
  5 * This source code is subject to terms and conditions of the Microsoft Public License. A 
  6 * copy of the license can be found in the License.html file at the root of this distribution. If 
  7 * you cannot locate the  Microsoft Public License, please send an email to 
  8 * dlr@microsoft.com. By using this source code in any fashion, you are agreeing to be bound 
  9 * by the terms of the Microsoft Public License.
 10 *
 11 * You must not remove this notice, or any other, from this software.
 12 *
 13 *
 14 * ***************************************************************************/
 15
 16using System.Dynamic.Utils;
 17
 18namespace System.Dynamic {
 19
 20    /// <summary>
 21    /// Represents the dynamic delete member operation at the call site, providing the binding semantic and the details about the operation.
 22    /// </summary>
 23    public abstract class DeleteMemberBinder : DynamicMetaObjectBinder {
 24        private readonly string _name;
 25        private readonly bool _ignoreCase;
 26
 27        /// <summary>
 28        /// Initializes a new instance of the <see cref="DeleteIndexBinder" />.
 29        /// </summary>
 30        /// <param name="name">The name of the member to delete.</param>
 31        /// <param name="ignoreCase">true if the name should be matched ignoring case; false otherwise.</param>
 32        protected DeleteMemberBinder(string name, bool ignoreCase) {
 33            ContractUtils.RequiresNotNull(name, "name");
 34
 35            _name = name;
 36            _ignoreCase = ignoreCase;
 37        }
 38
 39        /// <summary>
 40        /// Gets the name of the member to delete.
 41        /// </summary>
 42        public string Name {
 43            get {
 44                return _name;
 45            }
 46        }
 47
 48        /// <summary>
 49        /// Gets the value indicating if the string comparison should ignore the case of the member name.
 50        /// </summary>
 51        public bool IgnoreCase {
 52            get {
 53                return _ignoreCase;
 54            }
 55        }
 56
 57        /// <summary>
 58        /// The result type of the operation.
 59        /// </summary>
 60        public override sealed Type ReturnType {
 61            get { return typeof(void); }
 62        }
 63
 64        /// <summary>
 65        /// Performs the binding of the dynamic delete member operation if the target dynamic object cannot bind.
 66        /// </summary>
 67        /// <param name="target">The target of the dynamic delete member operation.</param>
 68        /// <returns>The <see cref="DynamicMetaObject"/> representing the result of the binding.</returns>
 69        public DynamicMetaObject FallbackDeleteMember(DynamicMetaObject target) {
 70            return FallbackDeleteMember(target, null);
 71        }
 72
 73        /// <summary>
 74        /// When overridden in the derived class, performs the binding of the dynamic delete member operation if the target dynamic object cannot bind.
 75        /// </summary>
 76        /// <param name="target">The target of the dynamic delete member operation.</param>
 77        /// <param name="errorSuggestion">The binding result to use if binding fails, or null.</param>
 78        /// <returns>The <see cref="DynamicMetaObject"/> representing the result of the binding.</returns>
 79        public abstract DynamicMetaObject FallbackDeleteMember(DynamicMetaObject target, DynamicMetaObject errorSuggestion);
 80
 81        /// <summary>
 82        /// Performs the binding of the dynamic delete member operation.
 83        /// </summary>
 84        /// <param name="target">The target of the dynamic delete member operation.</param>
 85        /// <param name="args">An array of arguments of the dynamic delete member operation.</param>
 86        /// <returns>The <see cref="DynamicMetaObject"/> representing the result of the binding.</returns>
 87        public sealed override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObject[] args) {
 88            ContractUtils.RequiresNotNull(target, "target");
 89            ContractUtils.Requires(args == null || args.Length == 0);
 90
 91            return target.BindDeleteMember(this);
 92        }
 93
 94
 95        // this is a standard DynamicMetaObjectBinder
 96        internal override sealed bool IsStandardBinder {
 97            get {
 98                return true;
 99            }
100        }
101    }
102}