Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.Activities / System / Activities / Variable.cs / 1305376 / Variable.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Activities { using System; using System.Activities.Expressions; using System.Activities.Runtime; using System.Activities.Validation; using System.Collections.Generic; using System.Collections.Specialized; using System.ComponentModel; using System.Diagnostics; using System.Linq.Expressions; using System.Runtime; using System.Runtime.Serialization; [DebuggerDisplay("Name = {Name}, Type = {Type}")] public abstract class Variable : LocationReference { VariableModifiers modifiers; string name; int cacheId; internal Variable() : base() { this.Id = -1; } internal bool IsHandle { get; set; } [DefaultValue(null)] public new string Name { get { return this.name; } set { this.name = value; } } [DefaultValue(VariableModifiers.None)] public VariableModifiers Modifiers { get { return this.modifiers; } set { VariableModifiersHelper.Validate(value, "value"); this.modifiers = value; } } [IgnoreDataMember] // this member is repeated by all subclasses, which we control [DefaultValue(null)] public ActivityWithResult Default { get { return this.DefaultCore; } set { this.DefaultCore = value; } } protected override string NameCore { get { return this.name; } } internal abstract ActivityWithResult DefaultCore { get; set; } internal bool IsPublic { get; set; } internal Activity Owner { get; private set; } internal bool IsInTree { get { return this.Owner != null; } } public static Variable Create(string name, Type type, VariableModifiers modifiers) { return ActivityUtilities.CreateVariable(name, type, modifiers); } internal bool InitializeRelationship(Activity parent, bool isPublic, ref IListvalidationErrors) { if (this.cacheId == parent.CacheId) { if (this.Owner != null) { ValidationError validationError = new ValidationError(SR.VariableAlreadyInUseOnActivity(this.Name, parent.DisplayName, this.Owner.DisplayName), false, this.Name, parent); ActivityUtilities.Add(ref validationErrors, validationError); // Get out early since we've already initialized this variable. return false; } } this.Owner = parent; this.cacheId = parent.CacheId; this.IsPublic = isPublic; if (this.Default != null) { ActivityWithResult expression = this.Default; if (expression is Argument.IExpressionWrapper) { expression = ((Argument.IExpressionWrapper)expression).InnerExpression; } if (expression.ResultType != this.Type) { ActivityUtilities.Add( ref validationErrors, new ValidationError(SR.VariableExpressionTypeMismatch(this.Name, this.Type, expression.ResultType), false, this.Name, parent)); } return this.Default.InitializeRelationship(this, isPublic, ref validationErrors); } return true; } internal void ThrowIfNotInTree() { if (!this.IsInTree) { throw FxTrace.Exception.AsError(new InvalidOperationException(SR.VariableNotOpen(this.Name, this.Type))); } } internal void ThrowIfHandle() { if (this.IsHandle) { throw FxTrace.Exception.AsError(new InvalidOperationException(SR.CannotPerformOperationOnHandle)); } } public override Location GetLocation(ActivityContext context) { if (context == null) { throw FxTrace.Exception.ArgumentNull("context"); } // No need to call context.ThrowIfDisposed explicitly since all // the methods/properties on the context will perform that check. ThrowIfNotInTree(); Location location; if (!context.AllowChainedEnvironmentAccess) { if (this.IsPublic || !object.ReferenceEquals(this.Owner, context.Activity)) { throw FxTrace.Exception.AsError(new InvalidOperationException(SR.VariableOnlyAccessibleAtScopeOfDeclaration(context.Activity, this.Owner))); } if (!context.Environment.TryGetLocation(this.Id, out location)) { throw FxTrace.Exception.AsError(new InvalidOperationException(SR.VariableDoesNotExist(this.Name))); } } else { // No validations in the allow chained access case if (!context.Environment.TryGetLocation(this.Id, this.Owner, out location)) { throw FxTrace.Exception.AsError(new InvalidOperationException(SR.VariableDoesNotExist(this.Name))); } } return location; } // Soft-Link: This method is referenced through reflection by // ExpressionUtilities.TryRewriteLambdaExpression. Update that // file if the signature changes. public object Get(ActivityContext context) { if (context == null) { throw FxTrace.Exception.ArgumentNull("context"); } return context.GetValue
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Bits.cs
- PointAnimationUsingKeyFrames.cs
- mansign.cs
- TypeDescriptionProviderAttribute.cs
- XomlDesignerLoader.cs
- ResolvedKeyFrameEntry.cs
- JsonCollectionDataContract.cs
- RestHandlerFactory.cs
- Codec.cs
- PhonemeEventArgs.cs
- EntityDataSourceQueryBuilder.cs
- MenuItem.cs
- GridItemCollection.cs
- FlowDocumentPage.cs
- DataStorage.cs
- TemplatedControlDesigner.cs
- CalendarDesigner.cs
- PageTheme.cs
- BindingContext.cs
- _AutoWebProxyScriptWrapper.cs
- HierarchicalDataSourceDesigner.cs
- XpsStructure.cs
- XmlLoader.cs
- AdPostCacheSubstitution.cs
- PenCursorManager.cs
- XmlArrayAttribute.cs
- WebResourceUtil.cs
- DoubleAnimation.cs
- EffectiveValueEntry.cs
- ComboBoxRenderer.cs
- DataGridViewCellParsingEventArgs.cs
- GridViewPageEventArgs.cs
- MemoryMappedView.cs
- MultipartIdentifier.cs
- SurrogateChar.cs
- DSASignatureDeformatter.cs
- HostingEnvironmentSection.cs
- FileClassifier.cs
- Bold.cs
- SynchronizationLockException.cs
- WindowsListViewItem.cs
- DataGridViewAddColumnDialog.cs
- ComEventsSink.cs
- MembershipSection.cs
- CultureData.cs
- PathSegmentCollection.cs
- TextHidden.cs
- Types.cs
- AmbientLight.cs
- PrePrepareMethodAttribute.cs
- AppDomain.cs
- DataMemberListEditor.cs
- ConnectivityStatus.cs
- NetworkInformationPermission.cs
- PenCursorManager.cs
- ItemCollection.cs
- GradientSpreadMethodValidation.cs
- RequestSecurityTokenForGetBrowserToken.cs
- WebRequestModulesSection.cs
- iisPickupDirectory.cs
- Expression.DebuggerProxy.cs
- ResourceSet.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- RangeValuePattern.cs
- SizeChangedEventArgs.cs
- RijndaelManaged.cs
- ConnectionStringSettings.cs
- ProtectedConfigurationSection.cs
- XmlQueryOutput.cs
- TrackingLocationCollection.cs
- Deflater.cs
- Calendar.cs
- SystemWebSectionGroup.cs
- UnsafeNativeMethods.cs
- SqlDataSourceQueryEditorForm.cs
- AudioFormatConverter.cs
- XmlWriter.cs
- WebPartEditorOkVerb.cs
- HelloOperationCD1AsyncResult.cs
- LogManagementAsyncResult.cs
- CssStyleCollection.cs
- GlobalizationAssembly.cs
- XslCompiledTransform.cs
- OleDbWrapper.cs
- XmlNodeChangedEventManager.cs
- ServiceAppDomainAssociationProvider.cs
- DataGridParentRows.cs
- HttpGetProtocolReflector.cs
- NavigationCommands.cs
- _NtlmClient.cs
- DataChangedEventManager.cs
- XmlIgnoreAttribute.cs
- ComponentCollection.cs
- RootDesignerSerializerAttribute.cs
- RewritingPass.cs
- RemotingAttributes.cs
- FlowPanelDesigner.cs
- ToolStripRenderEventArgs.cs
- DataObjectFieldAttribute.cs
- FigureHelper.cs