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
- BmpBitmapEncoder.cs
- CommandHelpers.cs
- FieldCollectionEditor.cs
- CollectionChange.cs
- LinkedResource.cs
- Metafile.cs
- HtmlInputButton.cs
- EdmToObjectNamespaceMap.cs
- MemberAssignment.cs
- CommonProperties.cs
- SystemIcmpV6Statistics.cs
- AttributeEmitter.cs
- AbsoluteQuery.cs
- Helper.cs
- UnSafeCharBuffer.cs
- DiagnosticTrace.cs
- _CookieModule.cs
- XmlSchemaException.cs
- ReadOnlyPropertyMetadata.cs
- JpegBitmapDecoder.cs
- Misc.cs
- SingleResultAttribute.cs
- RawUIStateInputReport.cs
- xmlglyphRunInfo.cs
- StreamingContext.cs
- GrammarBuilderWildcard.cs
- BamlLocalizer.cs
- LocalizationComments.cs
- ServiceErrorHandler.cs
- ValueConversionAttribute.cs
- MobileControlDesigner.cs
- ObjectStateEntryDbUpdatableDataRecord.cs
- DbMetaDataFactory.cs
- Single.cs
- CodeTypeMember.cs
- SpeechRecognizer.cs
- GACMembershipCondition.cs
- StorageBasedPackageProperties.cs
- ValidatorCollection.cs
- HierarchicalDataBoundControl.cs
- SevenBitStream.cs
- RenderContext.cs
- LiteralText.cs
- ScriptControlDescriptor.cs
- ComboBoxRenderer.cs
- WindowsPen.cs
- XmlSchemaAnyAttribute.cs
- TraceContextRecord.cs
- ErrorFormatterPage.cs
- AttributeProviderAttribute.cs
- SmiEventSink_Default.cs
- MembershipPasswordException.cs
- XmlSchemaRedefine.cs
- ObjectDataSourceChooseMethodsPanel.cs
- SessionState.cs
- SystemUnicastIPAddressInformation.cs
- ResumeStoryboard.cs
- TextEditorParagraphs.cs
- EdmSchemaAttribute.cs
- SystemIPGlobalProperties.cs
- WebPartConnectionsCloseVerb.cs
- UrlPropertyAttribute.cs
- MainMenu.cs
- SqlFunctionAttribute.cs
- documentsequencetextcontainer.cs
- OrderedHashRepartitionStream.cs
- CancellationHandlerDesigner.cs
- AbstractSvcMapFileLoader.cs
- UrlAuthFailedErrorFormatter.cs
- DescendantOverDescendantQuery.cs
- SymbolMethod.cs
- DesigntimeLicenseContextSerializer.cs
- OrthographicCamera.cs
- x509store.cs
- NativeMethods.cs
- CoTaskMemSafeHandle.cs
- DataGridViewCellValidatingEventArgs.cs
- ConfigurationValidatorBase.cs
- ArgumentFixer.cs
- PageHandlerFactory.cs
- ValueSerializerAttribute.cs
- InheritedPropertyChangedEventArgs.cs
- HtmlForm.cs
- PropertyDescriptor.cs
- CheckBoxBaseAdapter.cs
- PolyBezierSegment.cs
- ErrorRuntimeConfig.cs
- WebBrowsableAttribute.cs
- Button.cs
- ImageMetadata.cs
- DataGridViewHeaderCell.cs
- SchemaCreator.cs
- TPLETWProvider.cs
- XmlDataSource.cs
- StringCollection.cs
- LicenseProviderAttribute.cs
- DiagnosticTraceSource.cs
- FactoryRecord.cs
- CodeStatement.cs
- SqlComparer.cs