Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.Activities / System / Activities / Expressions / ValueTypePropertyReference.cs / 1305376 / ValueTypePropertyReference.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Activities.Expressions { using System; using System.ComponentModel; using System.Reflection; using System.Runtime; using System.Runtime.Serialization; public sealed class ValueTypePropertyReference: CodeActivity > { PropertyInfo propertyInfo; [DefaultValue(null)] public string PropertyName { get; set; } [DefaultValue(null)] public InOutArgument OperandLocation { get; set; } protected override void CacheMetadata(CodeActivityMetadata metadata) { if (!typeof(TOperand).IsValueType) { metadata.AddValidationError(SR.TypeMustbeValueType(typeof(TOperand).Name)); } if (typeof(TOperand).IsEnum) { metadata.AddValidationError(SR.TargetTypeCannotBeEnum(this.GetType().Name, this.DisplayName)); } else if (String.IsNullOrEmpty(this.PropertyName)) { metadata.AddValidationError(SR.ActivityPropertyMustBeSet("PropertyName", this.DisplayName)); } else { this.propertyInfo = typeof(TOperand).GetProperty(this.PropertyName); if (this.propertyInfo == null) { metadata.AddValidationError(SR.MemberNotFound(PropertyName, typeof(TOperand).Name)); } } bool isRequired = false; if (this.propertyInfo != null) { MethodInfo setMethod = this.propertyInfo.GetSetMethod(); if (setMethod == null) { metadata.AddValidationError(SR.MemberIsReadOnly(propertyInfo.Name, typeof(TOperand))); } if (setMethod != null && !setMethod.IsStatic) { isRequired = true; } } MemberExpressionHelper.AddOperandLocationArgument (metadata, this.OperandLocation, isRequired); } protected override Location Execute(CodeActivityContext context) { Location operandLocationValue = this.OperandLocation.GetLocation(context); Fx.Assert(operandLocationValue != null, "OperandLocation must not be null"); Fx.Assert(this.propertyInfo != null, "propertyInfo must not be null"); return new PropertyLocation(this.propertyInfo, operandLocationValue); } [DataContract] class PropertyLocation : Location { [DataMember(EmitDefaultValue = false)] Location ownerLocation; [DataMember] PropertyInfo propertyInfo; public PropertyLocation(PropertyInfo propertyInfo, Location ownerLocation) : base() { this.propertyInfo = propertyInfo; this.ownerLocation = ownerLocation; } public override TResult Value { get { // Only allow access to public properties, EXCEPT that Locations are top-level variables // from the other's perspective, not internal properties, so they're okay as a special case. // E.g. "[N]" from the user's perspective is not accessing a nonpublic property, even though // at an implementation level it is. if (this.propertyInfo.GetGetMethod() == null && TypeHelper.AreTypesCompatible(this.propertyInfo.DeclaringType, typeof(Location)) == false) { throw FxTrace.Exception.AsError(new InvalidOperationException(SR.WriteonlyPropertyCannotBeRead(this.propertyInfo.DeclaringType, this.propertyInfo.Name))); } return (TResult)this.propertyInfo.GetValue(this.ownerLocation.Value, null); } set { object copy = this.ownerLocation.Value; this.propertyInfo.SetValue(copy, value, null); this.ownerLocation.Value = (TOperand)copy; } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- HttpContext.cs
- ResourceManager.cs
- SQLDouble.cs
- PathData.cs
- TypeSystemHelpers.cs
- Double.cs
- ManipulationVelocities.cs
- InstanceOwnerQueryResult.cs
- GlyphRunDrawing.cs
- PackageProperties.cs
- MetadataProperty.cs
- CollectionView.cs
- SafePointer.cs
- OracleConnectionStringBuilder.cs
- TextElementEditingBehaviorAttribute.cs
- ImageListUtils.cs
- TcpConnectionPool.cs
- CachingParameterInspector.cs
- UniqueIdentifierService.cs
- ZoneButton.cs
- TypeToken.cs
- WaitHandleCannotBeOpenedException.cs
- EditCommandColumn.cs
- GenericRootAutomationPeer.cs
- FastEncoderWindow.cs
- MemberAccessException.cs
- InputReferenceExpression.cs
- Compiler.cs
- TrackBar.cs
- ControlEvent.cs
- InstanceHandleReference.cs
- QueryCacheManager.cs
- XamlClipboardData.cs
- XmlAttributeOverrides.cs
- MessageQueuePermissionAttribute.cs
- BitmapEffectCollection.cs
- EtwTrace.cs
- XmlSchemaCollection.cs
- indexingfiltermarshaler.cs
- DataControlFieldCell.cs
- CardSpacePolicyElement.cs
- FieldTemplateUserControl.cs
- TextBreakpoint.cs
- SweepDirectionValidation.cs
- InvalidOperationException.cs
- WindowPattern.cs
- RevocationPoint.cs
- ExpressionNormalizer.cs
- CustomAttributeFormatException.cs
- RemotingConfigParser.cs
- GatewayDefinition.cs
- PropertyValueChangedEvent.cs
- XPathDocumentNavigator.cs
- AdornerHitTestResult.cs
- ArglessEventHandlerProxy.cs
- FlowNode.cs
- DependencyPropertyChangedEventArgs.cs
- ChannelSinkStacks.cs
- Odbc32.cs
- Trustee.cs
- DbTransaction.cs
- ThicknessKeyFrameCollection.cs
- QuadraticBezierSegment.cs
- RepeaterDesigner.cs
- TransactionScope.cs
- TextProviderWrapper.cs
- DbException.cs
- FilteredAttributeCollection.cs
- TextModifierScope.cs
- DbConnectionStringBuilder.cs
- TableCell.cs
- SimpleRecyclingCache.cs
- RenderDataDrawingContext.cs
- ColorMap.cs
- GridViewUpdateEventArgs.cs
- ParserStreamGeometryContext.cs
- ComponentChangingEvent.cs
- rsa.cs
- NodeInfo.cs
- HtmlInputRadioButton.cs
- x509store.cs
- MLangCodePageEncoding.cs
- HtmlInputReset.cs
- XmlTextWriter.cs
- XmlValidatingReader.cs
- Propagator.cs
- WebPartCollection.cs
- filewebresponse.cs
- AdapterUtil.cs
- LoginName.cs
- QilValidationVisitor.cs
- ResourceReferenceKeyNotFoundException.cs
- ProviderMetadataCachedInformation.cs
- EUCJPEncoding.cs
- Environment.cs
- MethodCallTranslator.cs
- DesignerActionPropertyItem.cs
- JoinCqlBlock.cs
- AudioFormatConverter.cs
- TextRangeBase.cs