代码之美~Func让构造方法为属性赋值更灵活
2012-07-17 16:34
176 查看
有时我们习惯上把基类中属性的赋值权限放在它的构造方法上,这样给我们感觉更直接,也更安全,这也体现了面向对象的封装性,即将不想开放的东西隐藏到类内部,当进行.net3.5时代后,属性的定义显得更加美观和合理,看下面是几种具有不同读写权限的属性。
上面的知识只是为本文做一个铺垫,本文主要说在构造方法中使用Func委托,让属性赋值更灵活。更多Func的资料请看我的这篇文章
实例说明:一个人类,一个中国人类,在中国人类中有个显示姓名的属性,它由构造方法为它赋值,而对于中国人和美国人她们姓名的组成是不一样的,所以将公用的东西提取到一个基类
Person中,而中国人相关的东西放在ChinaPeople中,它根据有自己的构造方法,可以有自己产生姓名的方式,男人一种,女人一种,这可以根据一个Gander枚举来实现切换。
Person代码如下:
而对于中国人来说,他们完全可以根据自己国家的标准和风俗去规定自己的姓名显示方法,如张三先生,李四小姐等,所以ChinaPerson类的内容如下:
调用时,代码如下:
结果为:
而在调用它的时间,就像我们需要的方式显示了,直接输入姓名就显示姓名,如果输入的是姓名和性别,就会根据性别的类型,去调用它的模板,这一切都是灵活使用Func委托的功劳,
在此,感谢一下Func,呵呵。辛苦了。
/// <summary> /// 完全公开 /// </summary> public string ErrorMessage { get; set; } /// <summary> /// 读完全公开,但写操作约束在了子类 /// </summary> public string ErrorMessage { get; protected set; } /// <summary> /// 读完全公开,但写操作只能在本类中进行 /// </summary> public string ErrorMessage { get; private set; } /// <summary> /// 只读属性,只能返回消息,不能赋值 /// </summary> public string ErrorMessage { get; }
上面的知识只是为本文做一个铺垫,本文主要说在构造方法中使用Func委托,让属性赋值更灵活。更多Func的资料请看我的这篇文章
实例说明:一个人类,一个中国人类,在中国人类中有个显示姓名的属性,它由构造方法为它赋值,而对于中国人和美国人她们姓名的组成是不一样的,所以将公用的东西提取到一个基类
Person中,而中国人相关的东西放在ChinaPeople中,它根据有自己的构造方法,可以有自己产生姓名的方式,男人一种,女人一种,这可以根据一个Gander枚举来实现切换。
Person代码如下:
public abstract class Person { #region Fields private string _errorMessage; private Func<string> _func; #endregion #region Constructors protected Person() { } protected Person(Func<string> displayNameAccessor) { this._func = displayNameAccessor; } protected Person(string displayName) : this(() => displayName) { } #endregion #region Methods & Properies public string DisplayName { get { return this._func(); } } #endregion }
而对于中国人来说,他们完全可以根据自己国家的标准和风俗去规定自己的姓名显示方法,如张三先生,李四小姐等,所以ChinaPerson类的内容如下:
public class ChinaPerson : Person { public ChinaPerson(string name, Gander gander) : base(() => FormatName(name, gander)) { } public ChinaPerson(string name) : base(name) { } public ChinaPerson() { } /// <summary> /// 中国人类型,格式姓名 /// </summary> /// <param name="name"></param> /// <param name="gander"></param> /// <returns></returns> public static string FormatName(string name, Gander gander) { string res = null; switch (gander) { case Gander.Male: res = string.Format("中国人姓名是:{0}先生", name); break; case Gander.FeMale: string.Format("中国人姓名是:{0}女士", name); break; } return res; } }
调用时,代码如下:
ChinaPerson cm = new ChinaPerson("张三", Gander.Male); Console.WriteLine(cm.DisplayName); cm = new ChinaPerson("张三"); Console.WriteLine(cm.DisplayName);
结果为:
而在调用它的时间,就像我们需要的方式显示了,直接输入姓名就显示姓名,如果输入的是姓名和性别,就会根据性别的类型,去调用它的模板,这一切都是灵活使用Func委托的功劳,
在此,感谢一下Func,呵呵。辛苦了。
相关文章推荐
- 代码之美~Func让构造方法为属性赋值更灵活(转)
- java通过构造方法为属性赋值
- js的原型实例prototype--方法--属性,构造,赋值--方法同样有原型--原型含义
- 关于Java中的构造方法和set方法()给属性赋值
- 创建Employee类,在类中定义三个属性:编号,姓名,年龄,然后在构造方法里初始化这三个属性,最后载实现接口中的定义的CompareTo方法,将对象按编号升序排列。根据已有的代码,补全程序。
- 编写高质量代码改善C#程序的157个建议——建议93:构造方法应初始化主要属性和字段
- 【JAVA】39、通过构造方法为属性赋值
- 通过构造方法为私有属性赋值
- 反射给没有set方法的属性赋值
- 反射机制的概述和字节码对象的获取方式 JavaBean的概述&BeanUtils的使用 反射操作构造方法、成员方法、成员属性
- 常用的属性或者构造方法参数的配置
- C#两个相同属性的类赋值方法
- 用Set方法对JavaBean属性赋值
- asp.net中后台给控件添加属性的方法代码
- Scala学习之类和属性篇(二):定义类的辅助构造方法
- 获取对象的接口信息(方法/属性/事件)(VB6代码)
- JS构造方法,方法,属性说明
- 静态属性、静态代码块、静态方法、构造方法、普通方法的执行顺序
- vba编程不知道该使用什么对象属性方法实现操作的时候用宏录制来查阅代码
- java面向对象(类、对象、属性、方法、构造、this)