C#高级编程(第7版)笔记--第3章对象与类型
2011-08-25 14:43
281 查看
本章新知识点有:
1、扩展方法
有许多扩展类的方式。如果有类的源代码,继承就是给对象添加功能的好方法。 但如果没有源代码,该怎么办?此时可以使用扩展方法,它允许改变一个类,但不需要该类的源
代码。
扩展方法是静态方法,它是类的一部分,但实际上没有放在类的源代码中。假定上例中的Money类需要一个方法AddToAmomtrdec涮 am。mtToAdd,。 但是,由于某种原因,程序集最初的源代码不能直接修改。此时必须做的所有工作就是创建一个静态类,把方法 AddToAmountO添加为一个静态方法。对应的代码如下:
namespace Wrox
(
public statio class MoneyExtension
(
public static void AddToAmount(this MOney money` decimal amountToAdd)
(
money.Amount += amountToAdd`
)
)
)
注意AddToAmomjO方法的参数。对于扩展方法,第一个参数是要扩展的类型,它放在血s关键字的后面。这告诉编译器,这个方法是Money类型的一部分。在这个例子中,Money是要扩展的类型。在扩展方法中,可以访问所扩展类型的所有公有方法和属性。
在主程序中,AddToAmomtO方法看起来像是另一个方法。它没有显示第一个参数,也不能对它进行任何处理。要使用新方法,需要执行如下调用,这与其他方法相同:
即使扩展方法是静态的,也要使用标准的实例方法语法。注意这里使用 cash1实例变量来调用AddToAmountO,而没有使用类型名。如果扩展方法与类中的某个方法同名,就从来不会调用扩展方法。类中已有的任何实例方法优先。
2、结构与类的区别:a:结构存在堆中,类放在堆中。b:结构是值类型继续自System.ValueType,类是引用类刑。c:结构不能继承,类可以。d:结构可以不实例化就使用,但类不行。
1、扩展方法
有许多扩展类的方式。如果有类的源代码,继承就是给对象添加功能的好方法。 但如果没有源代码,该怎么办?此时可以使用扩展方法,它允许改变一个类,但不需要该类的源
代码。
扩展方法是静态方法,它是类的一部分,但实际上没有放在类的源代码中。假定上例中的Money类需要一个方法AddToAmomtrdec涮 am。mtToAdd,。 但是,由于某种原因,程序集最初的源代码不能直接修改。此时必须做的所有工作就是创建一个静态类,把方法 AddToAmountO添加为一个静态方法。对应的代码如下:
namespace Wrox
(
public statio class MoneyExtension
(
public static void AddToAmount(this MOney money` decimal amountToAdd)
(
money.Amount += amountToAdd`
)
)
)
注意AddToAmomjO方法的参数。对于扩展方法,第一个参数是要扩展的类型,它放在血s关键字的后面。这告诉编译器,这个方法是Money类型的一部分。在这个例子中,Money是要扩展的类型。在扩展方法中,可以访问所扩展类型的所有公有方法和属性。
在主程序中,AddToAmomtO方法看起来像是另一个方法。它没有显示第一个参数,也不能对它进行任何处理。要使用新方法,需要执行如下调用,这与其他方法相同:
即使扩展方法是静态的,也要使用标准的实例方法语法。注意这里使用 cash1实例变量来调用AddToAmountO,而没有使用类型名。如果扩展方法与类中的某个方法同名,就从来不会调用扩展方法。类中已有的任何实例方法优先。
2、结构与类的区别:a:结构存在堆中,类放在堆中。b:结构是值类型继续自System.ValueType,类是引用类刑。c:结构不能继承,类可以。d:结构可以不实例化就使用,但类不行。
相关文章推荐
- c#高级编程第七版 学习笔记 第三章 对象和类型
- 【笔记】 《js权威指南》- 第3章 类型、值和变量 - 3.5 全局对象
- 《C#高级编程》【第三章】对象和类型 -- 学习笔记
- 《C#高级编程(第6版)》第3章筆記----第3章对象和类型
- 【笔记】 《js权威指南》- 第3章 类型、值和变量 - 3.2 文本
- Javascript学习笔记:对象的属性类型
- C++Primer阅读笔记-第3章-标准库类型string
- 犀牛——第3章 类型、值和变量 3.6 包装对象
- Java 回顾笔记_基本数据类型对象包装类
- C++primer阅读笔记-重载运算与类型转换(可调用对象与function)
- 第3章 Java笔记 数据类型和运 4000 算符
- Java笔记(1)- Java基础知识、类、对象、运算符、数据类型
- C#高级编程 (第六版) 学习 第三章:对象和类型
- js数据类型隐式转换笔记以及js包装对象
- javascript类型系统 Window对象学习笔记
- (25)Java学习笔记——常用对象API / 基本类型包装类
- C#学习笔记--引用类型分类,对象类型、字符串类型、数字类型,类型转换
- Python学习笔记:python3中的range()函数的返回对象类型
- C#特性 学习笔记(对象初始化器 匿名类型 扩展方法)
- R语言笔记1:R语言对象的数据类型(向量、数组、矩阵、 列表和数据框)