网站大量收购独家精品文档,联系QQ:2885784924

Visual C# 2008程序设计电子教案+习题答案+源代码曹静 第6章 面向对象的高级应用及C#语法新特性.ppt

Visual C# 2008程序设计电子教案+习题答案+源代码曹静 第6章 面向对象的高级应用及C#语法新特性.ppt

  1. 1、本文档共46页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * 第6章 面向对象的高级应用及C#语法新特性 6.8 匿名类型 在很多情况下,我们需要一种能够临时将一批具有一定关联的数据存放起来的对象;或者在某些情况下,我们对仅一个对象的“形状”(如属性的名字和类型等)比较感兴趣。例如Product类,当它和其他商品放在一起进行查询时,我们可能仅对其名称和价格感兴趣,并且希望将这两种属性放在另外一个单独的临时对象中以备今后使用。这时,我们关注的仅仅是这个临时对象具有Name和Price的属性感兴趣,至于它究竟是什么类型就无关紧要了。然而,为了使这样一个对象得以存在,通常不得不为这个无关紧要的类型写上一大堆“样本代码”,无非就是定义一个如Product的类,其中无非也就是形如name和price的私有域和名为Name与Price的公共可读写方法。 第6章 面向对象的高级应用及C#语法新特性 6.8 匿名类型 如果像这样封装的成员太多,代码量还是很可怕的,并且维护的工作量也相当大。针对于这些问题,在.NET3.5中,我们有了一个解决这种问题的捷径,称之为匿名类型,它是C#匿名方法语法的扩展。 var与new关键字一起使用时,可以创建匿名类型。匿名类型只是一个继承了object的、没有名称的类。该类的定义从初始化器中推断,类似于隐式类型化的变量。看下面的例子: 如果需要一个对象包含名字和价格,则可以声明如下: // 代表产品的一个匿名对象 var product = new { Name = notebook, Price = 199}; 这会生成一个包含Name和Price属性的对象。 第6章 面向对象的高级应用及C#语法新特性 6.8 匿名类型 一个匿名类型也有它的生存周期,那就是在生成它的方法之内。如果要向另一个方法以参数的形式传递它,那就必须先将其转换为object类型(匿名类型也是从object直接派生而来的)。但是这样会毁坏它内部属性的强类型。如果需要保持内部属性的强类型,所以建议在大多数情况下,还是采用传统的类或者结构体来存储数据比较可靠。 第6章 面向对象的高级应用及C#语法新特性 6.9 对象与集合初始化器 在写一些类的时候,我们往往在写构造方法的时候思考很长时间,除了一个无参构造函数外还在想需要写几个构造函数呢?哪些参数是需要初始化的?现在再也不需要为这事烦恼了。在.NET3.5中提供了对象与集合初始化器。 第6章 面向对象的高级应用及C#语法新特性 6.9 对象与集合初始化器 使用对象初始化器可以在创建对象时向对象的任何可访问的字段或属性分配值,而无需显式调用构造函数。如下面的代码所示: // 图书类 public class Book { // 图书名称 public string Title { get; set; } // 单价 public float Price { get; set; } // 作者 public string Author { get; set; } // ISBN号 public string ISBN { get; set; } } //对象初始化器 Book book = new Book { Title=C#,ISBN=123-456-789}; 第6章 面向对象的高级应用及C#语法新特性 6.9 对象与集合初始化器 总的说来对象与集合初始化器有如下特点: 对象初始化器实际上利用了编译器对对象中对外可见的字段和属性进行按序赋值。 对象初始化器允许只给一部分属性赋值,包括internal访问级别 对象初始化器可以结合构造函数一起使用,并且构造函数初始化先于对象初始化器执行。 集合初始化器会对初始化器中的元素进行按序调用ICollectionT.Add(T)方法。 注意对象初始化器和集合初始化器中成员的可见性和调用顺序。 对象与集合初始化器同样是一种编译时技术。 第6章 面向对象的高级应用及C#语法新特性 6.10 扩展方法 扩展方法使我们能够向现有类“添加”方法,而无需创建新的派生类、重新编译或以其他方式修改原始类。扩展方法是一种特殊的静态方法,但可以像类实例方法一样进行调用。对于用 C#语言,调用扩展方法与调用在类中实际定义的方法之间没有明显的差异。 有时候我们需要对.NET中的原始类型进行一些操作,但苦于无法扩展.NET中的原始类型的方法,只能创建一些helper方法,或者继承类。 扩展方法允许开发人员往一个现有的.NET中的原始类型的公开契约(contract)中添加新的方法,而不用生成子类或者重新编

您可能关注的文档

文档评论(0)

开心农场 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档