//--------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner Microsoft // @backupOwner Microsoft //--------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Diagnostics; using System.Text; namespace System.Data.Metadata.Edm { /// /// Class representing a function parameter /// public sealed class FunctionParameter : MetadataItem { internal static Func> DeclaringFunctionLinker = fp => fp._declaringFunction; #region Constructors /// /// The constructor for FunctionParameter taking in a name and a TypeUsage object /// /// The name of this FunctionParameter /// The TypeUsage describing the type of this FunctionParameter /// Mode of the parameter /// Thrown if name or typeUsage arguments are null /// Thrown if name argument is empty string internal FunctionParameter(string name, TypeUsage typeUsage, ParameterMode parameterMode) { EntityUtil.CheckStringArgument(name, "name"); EntityUtil.GenericCheckArgumentNull(typeUsage, "typeUsage"); _name = name; _typeUsage = typeUsage; SetParameterMode(parameterMode); } #endregion #region Fields private readonly TypeUsage _typeUsage; private readonly string _name; private readonly SafeLink _declaringFunction = new SafeLink(); #endregion #region Properties /// /// Returns the kind of the type /// public override BuiltInTypeKind BuiltInTypeKind { get { return BuiltInTypeKind.FunctionParameter; } } /// /// Gets/Sets the mode of this parameter /// /// Thrown if value passed into setter is null /// Thrown if the FunctionParameter instance is in ReadOnly state [MetadataProperty(BuiltInTypeKind.ParameterMode, false)] public ParameterMode Mode { get { return GetParameterMode(); } } /// /// Returns the identity of the member /// internal override string Identity { get { return _name; } } /// /// Returns the name of the member /// [MetadataProperty(PrimitiveTypeKind.String, false)] public String Name { get { return _name; } } /// /// Returns the TypeUsage object containing the type information and facets /// about the type /// [MetadataProperty(BuiltInTypeKind.TypeUsage, false)] public TypeUsage TypeUsage { get { return _typeUsage; } } /// /// Returns the declaring function of this parameter /// public EdmFunction DeclaringFunction { get { return _declaringFunction.Value; } } #endregion #region Methods /// /// Overriding System.Object.ToString to provide better String representation /// for this type. /// public override string ToString() { return Name; } /// /// Sets the member to read only mode. Once this is done, there are no changes /// that can be done to this class /// internal override void SetReadOnly() { if (!IsReadOnly) { base.SetReadOnly(); // TypeUsage is always readonly, no reason to set it } } #endregion } }