object GetValue(DependencyProperty dp) { // 从_effectiveValues中查找当前依赖项属性所对应的条目 EntryIndex entryIndex = this.LookupEntry(dp.GlobalIndex) EffectiveValueEntry entry; if (entryIndex.Found) { entry = this._effectiveValues[entryIndex.Index]; } else { // 创建默认的条目,其值为UnsetValue entry = new EffectiveValueEntry(dp, BaseValueSourceInternal.Unknown); } if (entry.Value != DependencyProperty.UnsetValue) { return entry.Value; // 返回条目中所记录的有效值 } // 如果条目中记录的值是无效的,那么创建该依赖项属性的默认条目,其所包含的值为默认值 PropertyMetadata metadata = dp.GetMetadata(this.DependencyObjectType); return EffectiveValueEntry.CreateDefaultValueEntry(dp, metadata.GetDefaultValue(this, dp)).Value; } 复制代码 所以说,WPF属性系统所指的更有效率并非是在执行时的属性访问速度,而是在一定程度上牺牲了执行速度而带来的内存占用降低。使用Flyweight模式实际上是大型应用程序实现中的一个常见选择。在程序中包含大量的具有相同类型的特定类型数据时,我们可以通过该模式非常有效地降低其所占用的内存。
.net源码摘录,已展开
最新推荐文章于 2024-09-06 15:57:42 发布