- 浏览: 399608 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (309)
- xaml C# wpf (0)
- scala java inner clas (1)
- Tools UML Eclipse UML2 (1)
- Timer .NET Framework (1)
- perl (6)
- python function paramter (1)
- Python Docstring (1)
- Python how to compare types (1)
- Python (8)
- java (5)
- C# (76)
- C# WPF (0)
- p4 (0)
- WPF (46)
- .net (6)
- xaml (1)
- javascript (40)
- windows (10)
- scala (4)
- winform (1)
- c++ (48)
- tools (12)
- cmd (1)
- os (0)
- CI (0)
- shell (0)
- C (2)
- haskell (49)
- functional (1)
- tool (1)
- gnu (1)
- linux (1)
- kaskell (0)
- svn (0)
- wcf (3)
- android (1)
最新评论
as we have discussed on the previous example that we have introduce the code snippet like this (see here):
serializationContext.AddProperty(x => x.BirthDate);
in this post, we are going to present a way that demonstrate how we can leverage the Lambda expression and effectively achieve refactor-proof references.
Our example is more about a very typical use case - the INotifyPropertyChanged impl. Where normally we will create a Invoke Pattern, and to that patter, one parameter is necessary, that is the name of the parameter.
normally , if we give a string for that name, we loose the ability to guard against changes when code is refactored. So, if we allow passing of a static typed LambdaExpression, such as this (this is a base class that will implements the IPropertyChanged)
public class ObservableObject : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; #region Protected protected void InvokePropertyChanged() { throw new NotImplementedException(); } protected void InovkePropertyChagned(string name) { throw new NotImplementedException(); } protected void InvokePropertyChanged(Expression<Func<object>> property_) { System.Diagnostics.Debug.Assert(property_ != null); var body = property_.Body; var memberAccessExpression = ((MemberExpression)body); var memberName = memberAccessExpression.Member.Name; Console.WriteLine("InvokePropertyChanged on {0}", memberName); } #endregion Protectedk }
So when we define a Concrete Observable class, and when we need to notify the changes, such as this
public class ObservableConcreteObject : ObservableObject { private string m_message; public string Message { get { return m_message; } set { m_message = value; InvokePropertyChanged("Message"); } } }
You can actually change the call to InvokePropertyChanged as this:
public string Message { get { return m_message; } set { m_message = value; // you can invoke like this; InvokePropertyChanged(() => this.Message); } }
So, all this is possbile when we try to pass in a lambda expression.
发表评论
-
wpf - example to enhance ComboBox for AutoComplete
2014-09-19 15:56 1976first let’s see an example ... -
Investigate and troubleshoot possible memory leak issue of .NET application
2014-07-31 10:42 0Hi All, I would like to sh ... -
C# – CoerceValueCallback合并、替换元数据值
2013-08-05 21:59 1925Topic: C# – CoerceValueCallbac ... -
wpf – ListView交替背景色
2013-07-02 20:56 6551Wpf – Alternate background col ... -
C# - 简单介绍TaskScheduler
2013-06-29 17:18 12038标题: C# - 简单介绍TaskSchedulerTit ... -
c# - Get enum from enum attribute
2013-06-27 21:32 1244DescriptionAttribute gives the ... -
C# - PInvoke, gotchas on the RegisterClassEx and the CreateWindowEx
2013-06-24 13:49 2571I get an exception message li ... -
c# - Use PInvoke to create simple win32 Application
2013-06-24 11:59 10946In this post, .net platform h ... -
c# - Linq's Select method as the Map function
2013-06-19 18:47 1287If you comes from a functiona ... -
c# - Tips of Linq expression Any to determine if a collection is Empty
2013-06-19 18:29 938When you are @ the linq expres ... -
myth buster - typeof accepting array of types not acceptable
2013-06-19 17:17 813I have seen from some book whe ... -
windows - trying to create WIN32 application with PInvoke
2013-06-19 14:34 0While it is stupid to do such ... -
WPF - Setting foreground color of Entire window
2013-06-13 16:00 1918You might as well as I would s ... -
WPF - Enhanced TabControl - TabControlEx aka Prerendering TabControl
2013-06-13 13:12 5330As an opening word, let's che ... -
wpf - ControlTemplate and AddLogicChild/RemoveLogicalChild
2013-06-10 15:42 1185Recently I was trying to debug ... -
c# - P/Invoke, DllImport, Marshal Structures and Type conversions
2013-06-05 15:25 1712P/Invoke as in the following q ... -
c# - A study on the NativeWindow - encapsulate window handle and procedure
2013-06-05 14:40 6091NativeWindow gives you a way t ... -
WCF - Notify server when client connects
2013-06-03 18:19 1221It is sometimes very importan ... -
wcf - Debug to enable Server exception in Fault message
2013-06-03 15:47 1091WCF will be able to send back ... -
c# - determine if a type/object is serialzable
2013-05-30 16:35 867In WCF, primitives type are s ...
相关推荐
sublime-text-refactor, 用于Javascript代码的sublime text 重构插件 用于 sublime-text-2和 3的 Javascript重构插件 [[Package Control] ( https://packagecontrol.herokuapp.com/downloads/JavaScript%2
【标题】"IOS应用源码——zac-dragkit-before-refactor-24-g5d02de8.rar" 提供的是一份iOS应用的源代码,这个项目在进行重构前的版本,具体版本号为24,Git提交哈希值为5d02de8。这个源代码库可能包含了一个名为...
在Emacs编辑器中,`clj-refactor.el`是一个非常强大的Clojure代码重构工具,它为Clojure编程提供了丰富的功能。而`discover-clj-refactor.el`则是这个工具的一个扩展,它添加了上下文菜单,使用户可以更直观、方便地...
在"Time-Of-Work-Refactor-master"项目中,我们可能遇到如下重构场景: 1. 如果发现大量重复代码,可以通过提取方法或创建模板来消除代码冗余。 2. 如果有复杂的条件语句,可以考虑使用策略模式或者枚举来简化逻辑...
《Java到Groovy的重构之旅:groovy-demo-java-for-refactor项目详解》 在软件开发领域,语言的选择往往直接影响到项目的效率与可维护性。Java作为一款广泛应用的面向对象编程语言,以其严谨的类型检查和丰富的类库...
本篇文章将深入探讨“Homework-01-Code-Refactor”项目中的HTML重构实践,揭示其中蕴含的编程原则和最佳实践。 首先,我们要理解HTML(HyperText Markup Language)是网页的基础结构语言,用于定义网页内容的布局和...
在"Horiseon-Code-Refactor-main"目录下,我们可以看到项目的源代码和可能的修改文件。通过对比重构前后的差异,我们可以学习到如何将最佳实践应用到实际项目中,提升我们的HTML编码技能。 总结来说,"Horiseon-...
在文件名列表中看到的"password-gen-refactor-main"可能是指项目的主文件或入口点,可能是JavaScript、Python或其他编程语言的主脚本。这个文件通常包含了项目的启动逻辑,如初始化密码生成器实例、设置默认参数、...
在压缩包文件"acl-fnd-lab-04a-calculator-refactor-main"中,我们可以推测它包含的主要文件和目录可能是: 1. HTML文件:计算器的界面代码,可能用简单的HTML元素如`<form>`,`<input>`和`<button>`来构建计算器的...
hw1-code-refactor 该存储库用于第1周HW1的代码重构家庭作业,代表第1周的代码重构是分配给github的第一份作业的头衔
在"hw-01-code-refactor-main"这个目录下,可能包含着项目的主要源代码。代码重构可能涉及到对这些文件的调整,包括HTML结构的改善,JavaScript逻辑的优化,以及CSS样式的清理和重构。通过对HTML的重构,我们可以...
从压缩包文件名称"Alone-Pre-Refactor-master"来看,"master"分支通常代表项目的主线或稳定版本。这意味着我们拿到的是这个游戏项目的主分支代码,包含了最新的开发成果和可能用于部署的代码。 深入研究这个项目,...
在"Horizon-Code-Refactor-main"这个目录下,你将找到项目的具体实现,包括重构前后的代码对比,这将为你提供一个实践这些原则的实际场景。通过学习和实践,你不仅能提升HTML重构技巧,还能对整个网站的架构有更深入...
关于 此回购示例说明了如何构建自己的服务器状态管理解决方案如何Swift变得复杂且难以维护,同时仍然无法满足作为React开发人员对服务器状态的许多期望。 每次提交都会添加更多功能来管理此服务器状态,直到获得...
在压缩包文件名“angular-forms-refactor-master”中,“master”通常表示这是项目的主分支,可能包含了最新的、稳定的代码版本。 关于Angular表单重构,我们可以考虑以下知识点: 1. **使用FormBuilder**: 如果...
在"Horiseon-code-refactor"中,我们可以推测以下关键知识点: 1. **HTML基础**:HTML(超文本标记语言)是构建网页的基础,用于定义页面内容和结构。在重构过程中,理解HTML元素、属性和语义化标签(如、、、、和...
在这个版本中,"javapns-json-refactor-master"可能包含了以下组件: 1. **源代码**:JavaPNS的核心类和接口,包括重构后的JSON处理代码。 2. **测试用例**:验证重构后功能的正确性和性能的测试代码。 3. **文档**...
在压缩包文件`github-jobs-refactor-main`中,我们可以预期找到该项目的主要源代码,包括组件、样式、配置文件以及可能的测试文件。通过阅读和分析这些文件,我们可以进一步了解重构的具体实现方式,以及如何有效地...