随笔分类 -  .NET

.NET Core .NET Framework
摘要:跟小伙伴一起重构一段 UI,试图将用户界面和业务代码分离的时候,小伙伴试图在业务代码中直接调用 UI。我们当然都知道这会产生耦合,于是小伙伴试图定义一些属性、变量或接口来解决这个耦合。虽然在代码的静态分析中,这一的耦合消失了,但我始终觉得不妥。觉得耦合依然存在,只是不再能被静态分析了。 我想到一个词 阅读全文
posted @ 2018-02-27 19:58 walterlv 阅读(531) 评论(0) 推荐(0) 编辑
摘要:显示一个模态窗口,正常而普遍的操作。然而却一直有一个难缠的 BUG:当关闭模态窗口时,父窗口有时会跑到其他程序窗口的后面! 而最近读到了微软工程师写过的话之后,明白了这个 BUG 的产生缘由以及解决方法。 这是什么 BUG? 你会发现,模态窗口关闭后,父窗口并没有回到当前的顶层显示中。取而代之的,是 阅读全文
posted @ 2018-02-27 19:54 walterlv 阅读(689) 评论(0) 推荐(1) 编辑
摘要:我在 .NET/C# 建议的异常处理原则 中描述了如何 catch 异常以及重新 throw。然而何时应该 throw 异常,以及应该 throw 什么异常呢? 究竟是谁错了? 代码中从上到下从里到外都是在执行一个个的包含某种目的的代码,我们将其称之为“任务”。当需要完成某项任务时,任务的完成情况只 阅读全文
posted @ 2018-02-27 19:51 walterlv 阅读(1207) 评论(3) 推荐(1) 编辑
摘要:当你想写一个泛型 的类型的时候,是否想过两个泛型参数、三个泛型参数、四个泛型参数或更多泛型参数的版本如何编写呢?是一个个编写?类小还好,类大了就杯具! 事实上,在 Visual Studio 中生成代码的手段很多,本文采用最笨的方式生成,但效果也很明显——代码写得轻松写得爽! 我们想要的效果 我们现 阅读全文
posted @ 2018-01-31 13:37 walterlv 阅读(287) 评论(0) 推荐(0) 编辑
摘要:Windows 10 创意者更新之后,默认开启了重启后恢复应用程序状态的功能。这是自 Vista 以来就提供的功能——Restart Manager。 应用程序实现这一功能只需要调用 RegisterApplicationRestart 即可。传入两个参数: 我封装了以下这个函数的调用并将其放到 G 阅读全文
posted @ 2018-01-30 08:46 walterlv 阅读(882) 评论(0) 推荐(1) 编辑
摘要:可移植类库、共享项目、.NET Standard 项目都能够帮我们完成跨多个 .NET SDK 的单一项目开发,但它们的跨 SDK 开发都有些限制。现在,我们又有新的方式能够跨多个 .NET SDK 开发了,这就是使用新的 csproj 文件格式。 看看拥有多个开发框架的项目长什么样吧! ▲ 多 S 阅读全文
posted @ 2018-01-30 08:45 walterlv 阅读(611) 评论(3) 推荐(2) 编辑
摘要:当一只断点打在 Visual Studio 的代码编辑器中,程序命中断点的那一刻,调试才刚刚开始……这个时候忙碌的手在键盘和鼠标之间来回跳跃,试图抓住每一次单步执行带来的状态改变。 如果命中断点的那一刻多数我需要的状态都自动呈现,偶尔需要的状态能够快速定位,那该多好!于是,有了 OzCode…… — 阅读全文
posted @ 2018-01-30 08:44 walterlv 阅读(771) 评论(0) 推荐(0) 编辑
摘要:MEF,Managed Extensibility Framework,现在已经发布了三个版本了,它们是 MEF 和 MEF2。 等等!3 去哪儿了?本文将教大家完成基于 MEF2 的开发。 MEF 和 MEF2 其实微软发布了四个版本的 MEF: 随着 .NET Framework 4.0 发布, 阅读全文
posted @ 2018-01-30 08:40 walterlv 阅读(1151) 评论(1) 推荐(1) 编辑
摘要:写过 .NET Standard 类库或者 .NET Core 程序的你一定非常喜欢微软为他们新开发的项目文件(对于 C#,则是 csproj 文件)。这种文件非常简洁,组织一个庞大的项目也只需要聊聊二三十行;也非常易读,你可以轻易地修改其代码而不用经过过多的提前学习。当然,微软曾经尝试过用 pro 阅读全文
posted @ 2018-01-30 08:38 walterlv 阅读(343) 评论(0) 推荐(0) 编辑
摘要:小伙伴在一次垃圾回收中,发现对象并没有被回收掉,而注释掉一句代码后它便能够回收。 这究竟是为什么? 不关心探索过程的就直接拉到最后看结论吧! 探索 测试代码是这样的: 需要验证的是 MainPage 对象是否被回收。然而在这段代码中,MainPage 并没有被回收;然而去掉最后一行,MainPage 阅读全文
posted @ 2018-01-30 08:31 walterlv 阅读(503) 评论(0) 推荐(0) 编辑
摘要:在我之前的一篇博客 NullReferenceException,就不应该存在! 中,我吐槽了 C# 中 null 的弊端以及避免 null 的方法;事实上这本都是现代高级语言中极力推崇的做法。Kotlin 和 Swift 自诞生之日起引用类型就不能为空,C# 背着历史的包袱直到 8.0 才开始这么 阅读全文
posted @ 2017-12-30 14:46 walterlv 阅读(526) 评论(0) 推荐(0) 编辑
摘要:一个按钮,点击执行一个任务。我们可能直接在它的 Click 事件中写下了执行任务的代码。 一般我们无需担心这样的代码会出现什么问题——但是,这样的好事情只对同步任务有效;一旦进入了异步世界,这便是无尽的 BUG! 重新进入(Reentrancy) ▲ 以上,在按钮点击事件中执行同步任务 上面的代码, 阅读全文
posted @ 2017-12-30 14:30 walterlv 阅读(270) 评论(0) 推荐(0) 编辑
摘要:WPF 自带的键盘焦点样式是与传统控件样式搭配的,但 WPF 凭着其强大的自定义样式的能力,做出与传统控件样式完全不同风格的 UI 简直易如反掌。这时,其自带的键盘焦点样式(FocusVisualStyle)就非常不搭了,改改会舒服得多。比如,改成 UWP 的样式。 本文将展示 WPF 自定义键盘焦 阅读全文
posted @ 2017-12-30 14:28 walterlv 阅读(647) 评论(1) 推荐(0) 编辑
摘要:将文档放到代码里面,文档才会及时地更新! 微软从 .NET Framework 4.0 开始,增加了 System.Diagnostics.Contracts 命名空间,用来把契约文档融入代码。然而后面一直不冷不热,Visual Studio 都没天然支持。ReSharper 不知何时加入了 ReS 阅读全文
posted @ 2017-12-30 14:21 walterlv 阅读(749) 评论(0) 推荐(0) 编辑
摘要:Windows 10 的创造者更新为开发者们带来了 Connected Animation 连接动画,这也是 Fluent Design System 的一部分。它的视觉引导性很强,用户能够在它的帮助下迅速定位操作的对象。 不过,这是 UWP,而且还是 Windows 10 Creator’s Up 阅读全文
posted @ 2017-12-30 14:17 walterlv 阅读(381) 评论(0) 推荐(0) 编辑
摘要:不知你有没有看过 Linux 上 oh-my-zsh 的样子?看过之后你一定会惊叹,原来命令行还能这么玩!然而 Windows 下能这么玩吗?答案是可行的,接下来就来看看怎么玩。 Windows 下我们用 Oh My Posh 在 PowerShell 中实现这样的效果。先放一张我的美化效果图: 接 阅读全文
posted @ 2017-12-30 14:10 walterlv 阅读(1404) 评论(0) 推荐(0) 编辑
摘要:当我们为一个委托写 -= 的时候,ReSharper 会提示“Delegate Subtraction Has Unpredictable Result”,即“委托的减法可能出现非预期的结果”。然而在写为事件写 -= 的时候却并没有这样的提示。然而这个提示是什么意思呢?为什么会“非预期”?为什么委托 阅读全文
posted @ 2017-12-30 10:56 walterlv 阅读(319) 评论(0) 推荐(0) 编辑
摘要:WPF 的 ScrollViewer 没有水平滚动和垂直滚动的属性 HorizontalScrollOffset VerticalScrollOffset,只有水平滚动和垂直滚动的方法 ScrollToHorizontalOffset ScrollToVerticalOffset,那么怎么给滚动过程 阅读全文
posted @ 2017-12-20 23:24 walterlv 阅读(673) 评论(0) 推荐(0) 编辑
摘要:此前有小伙伴询问我为何他 1 像素的线条显示发虚,然后我告诉他是“像素对齐”的问题,然而他设置了各种对齐像素的属性依旧没有作用。于是我对此进行了一系列试验,对 WPF 像素对齐的各种方法进行了一次总结。此后在 StackOverflow 中,我回答了 graphics - WPF DrawingCo 阅读全文
posted @ 2017-12-20 23:22 walterlv 阅读(916) 评论(0) 推荐(1) 编辑
摘要:背景色千差万别,如果希望在这样复杂的背景色下显示清晰可辨的前景色(例如显示文字),那如何选择这样的前景色才能确保适用于所有的背景呢? 灰度图的心理学公式 红绿蓝三色是非常不直观的颜色表示的方法,如果不经过训练,人类几乎没有办法直接通过 RGB 的值来猜出大概的颜色来。而 HSB 是用来解决人眼感知问 阅读全文
posted @ 2017-11-30 01:43 walterlv 阅读(640) 评论(0) 推荐(0) 编辑