当前位置: 首页 > news >正文

如何更新网站网站改版策划

如何更新网站,网站改版策划,服装工厂做网站的好处,网站关键词怎么写如果你使用过 WPF/UWP 等 XAML UI 框架#xff0c;那么应该了解到附加属性的概念。那么没有依赖属性支持的时候如何做附加属性的功能呢#xff1f;你可能会想到弱引用。但这需要做一个弱引用字典#xff0c;要写的代码还是非常麻烦的。本文介绍 .NET 的 ConditionalWeakTabl… 如果你使用过 WPF/UWP 等 XAML UI 框架那么应该了解到附加属性的概念。那么没有依赖属性支持的时候如何做附加属性的功能呢你可能会想到弱引用。但这需要做一个弱引用字典要写的代码还是非常麻烦的。本文介绍 .NET 的 ConditionalWeakTableTKey,TValue 类型适用于 .NET Framework 4.0 以上和全部 .NET Core 的版本。这不是字典现成可用的弱引用字典即 ConditionalWeakTableTKey,TValue。然而实际上这个类的原本作用并不是当作字典使用如果你使用过 WPF/UWP 等 XAML UI 框架那么应该了解到附加属性的概念。这其实是 .NET 为我们提供的一种附加字段的机制。比如你有一个类class Foo{ // 请忽略这里公有字段带来的设计问题只是为了演示。 public string A;}我们希望为它增加一个字段 Barclass Foo{ public string A; public Bar Bar;}那么我们需要修改类 Foo 本身以实现这个效果但是这样就使得 Foo 耦合了 Bar从而破坏了内聚性/依赖倒置原则。典型的情况是 Foo 类表示一个人 Person它里面不应该包含一个 某行账号 这样的字段因为很多人是没有那家银行账号的。这个信息让那家银行存起来才是比较符合设计原则的设计。我们可以通过一个字典 DictionaryFoo, Bar 来存储所有 Foo 实例额外增加的 Bar 的值可以避免让 Foo 类中增加 Bar 字段从而获得更好的设计。但这样就引入了一个静态字典从而使得所有的 Foo 和 Bar 的实例无法得到释放。我们想当然希望拥有一个弱引用字典来解决问题。然而这是一个 X-Y 问题。实际上 .NET 中提供了 ConditionalWeakTableTKey,TValue 帮我们解决了最本质的问题——在部分场景下期望为 Foo 类添加一个字段。虽然它不是弱引用字典但能解决此类问题同时也能当作一个弱引用字典来使用仅此而已。你需要注意的是ConditionalWeakTableTKey,TValue 并不实现 IDictionaryTKey,TValue 接口只是里面有一些像 IDictionaryTKey, TValue 的方法可以当作字典使用也可以遍历取出剩下的所有值。验证ConditionalWeakTableTKey,TValue 中的所有 Key 和所有的 Value 都是弱引用的并且会在其 Key 被回收或者 Key 和 Value 都被回收之后自动从集合中消失。这意味着当你使用它来为一个类型附加一些字段或者属性的时候完全不用担心内存泄漏的问题。下面我写了一段代码用于验证其内存泄漏问题向 ConditionalWeakTableTKey,TValue 中添加了三个键值对将后两个的 key 设为 null进行垃圾回收。using System;using System.Linq;using System.Runtime.CompilerServices;namespace Walterlv.Demo.Weak{ class Program { public static void Main() { var key1 new Key(Key1); var key2 new Key(Key2); var key3 new Key(Key3); var table new ConditionalWeakTableKey, WalterlvValue { {key1, new WalterlvValue()}, {key2, new WalterlvValue()}, {key3, new WalterlvValue()} }; var weak2 new WeakReference(key2); key2 null; key3 null; GC.Collect(); Console.WriteLine($key1 {key1?.ToString() ?? null}key2 {key2?.ToString() ?? null}, weak2 {weak2.Target ?? null}key3 {key3?.ToString() ?? null}Table {{{string.Join(, , table.Select(x ${x.Key} {x.Value}))}}}); } } public class Key { private readonly string _name; public Key(string name) _name name; public override string ToString() _name; } public class WalterlvValue { public DateTime CreationTime DateTime.Now; public override string ToString() CreationTime.ToShortTimeString(); }}这段代码的运行结果如下图从中我们可以发现当某个 Key 被回收后ConditionalWeakTableTKey,TValue 中就没有那一项键值对了当 Key 的实例依然在的时候ConditionalWeakTableTKey,TValue 中的 Value 依然还会存在。另外我们这里在调查内存泄漏问题你需要在 Release 配置下执行此代码才能得到最符合预期的结果。参考资料ConditionalWeakTableTKey,TValue Class (System.Runtime.CompilerServices) - Microsoft DocsGood implementation of weak dictionary in .Net - Stack OverflowPresenting WeakDictionary[TKey, TValue] – Nick Guerrera’s blog.net - Understanding ConditionalWeakTable - Stack Overflow原文地址https://blog.walterlv.com/post/conditional-weak-table.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com
http://www.zqtcl.cn/news/385297/

相关文章:

  • 做外贸建网站需要推广吗服装如何做微商城网站
  • 上海市建设安全协会网站查询考试伪静态 wordpress
  • 网站免费建站o网站编程多少钱
  • 建设网站开发海外推广服务
  • 网站建设需要提供的资料文档营销平台建设
  • 做个响应式网站多少钱河南网络推广系统
  • wordpress的后台文章图文发布清远市seo广告优化
  • 长沙的互联网网站公司招标文件免费下载网站
  • icp备案系统网站品网站建设公司排名
  • 什么网站可以做音乐相册可信的品牌网站建设
  • 洛阳网站建设优惠公司网站查询ip地址
  • 学校网站模版电影网站要怎样做才有出路
  • 无锡网站建设 微信企业网站建设与管理期末考试
  • 海南海口网站开发公司怎么建立微网站?
  • 网站建设 鄂icp备app 微网站
  • 西安做网站seo网站站内优化怎么做
  • 建设网站方案公司wordpress 视差主题
  • 网站 建设 语言wordpress同步
  • 三水 网站建设建设部网站网上大厅
  • 深圳高端企业官方网站建设最好的网站设计开发公司
  • 主流大型网站开发语言调查怀柔富阳网站建设
  • 公司网站建设服务类别最便宜云主机永久免费
  • 心悦dnf免做卡网站竞价恶意点击犯法吗
  • 企业网站的类型包括无锡专业网站建设
  • 手机版刷赞网站建设软文代写文案
  • 网站内容与目录结构色一把做最好的网站
  • 优化网站方法企业做网站属于广告宣传费吗
  • 站长之家alexa排名网站架构 seo
  • 四川智能网站建设制作建设网站代理
  • 对网站建设好学吗智慧企业解决方案