第八章 方法

1. 概述

  本章重点讲述类型中的各种方法,包括实例构造器、类型构造器、操作符/类型转换重载、扩展方法、分部方法。

2. 名词解释

  ① 构造器:是允许将类型的实例初始化为良好状态的一种特殊方法。

3. 主要内容

  3.1 实例构造器和类(引用类型)

    ① 创建一个引用类型的实例时,首先为实例的数据字段分配内存,然后初始化对象的附加字段(类型对象指针和同步块索引),最后调用类型的实例构造器 来设置对象的初始状态。

    ② 实例构造器永远不能被继承。

    ③ 如果类的修饰符为static(sealed或abstract),编译器不会在类的定义中生成一个默认构造器。

  3.2 实例构造器和结构(值类型)

    ① 值类型的实例构造器只有在显示调用时才会执行。

  3.3 类型构造器

    ① 默认没有定义类型构造器,只能定义一个。

    ② 必须是static,默认是私有的。保证只能被CLR调用。

    ③ 不要在值类型中定义类型构造器。

    ④ 类型构造器中的代码只能访问类型的静态字段。

    ⑤ 显式类型构造器可能包含具有副作用的代码,所以需要精确拿捏运行的时间。

  3.4 操作符重载方法

    ① CLR规范要求操作符重载方法必须是 public 和 static 方法。

  3.5 转换操作符方法

    ① C#中,implicit关键字告诉编译器为了生成代码来调用方法,不需要在源码中进行显式转换。

      而explicit告诉编译器只有在发现了显式转型时,才调用方法。

      operator关键字告诉编译器该方法是一个转换操作符。

      operator之后是对象要转换成的类型,后面的括号中,是要从什么类型转换。

      *建议将System.Decimal作为一个典型来研究操作符重载和转换操作符方法。

public static implicit operator Rational (Single num)
{
        return new Rational(num);
}

public static explicit operator Int32 (Rational r)
{
        return r.ToInt32();
}
Rational r2 = 2.5F;
Int32 x = (Int32) r1;

  3.6 扩展方法

    C#的扩展方法,允许你定义一个静态方法,并用实例方法的语法来调用它。(在第一个参数前加this关键字)

    3.6.1 规则和原则

      ① C#只支持扩展方法,不支持扩展属性、扩展事件、扩展操作符等。

      ② 扩展方法必须在非泛型的静态类中声明。

      ③ 要求静态类本身具有文件作用域。

      ④要求引用所属的命名空间。

    3.6.2 用扩展方法扩展各种类型

      可以为委托或者枚举类型添加扩展方法。

    3.6.3 ExtensionAttribute类

      C#中,一旦用this关键字标记了某个静态方法的第一个参数,编译器就会在内部向该方法应用一个定制attribute。

  3.7 分部方法

    ① 只能在分部类或结构中声明。

    ② 只能返回void,不能有输出参数。

    ③ 声明和实现必须具有完全一致的签名。

    ④ 如果没有对应的实现部分,便不能在代码中创建一个委托来引用这个分部方法。

    ⑤ 总是被视为private方法。

4. 总结

  

时间: 2024-12-14 18:41:04

第八章 方法的相关文章

《JavaScript语言精粹》笔记

Function.prototype.method=function(name,func){    this.prototype[name]=func;    return this;}//1.注释最好使用双斜杠而不是带*斜杠/*2.数字,js不区分整数类型,1和1.0是相等的 * NaN是一个数值,它表示一个不能产生正常结果的运算结果.NaN不等于任何值,包括它自己,可用isNaN(number)检查 * 值Infinity表示所有大于1.79769313486231570e+308的值 */

《JavaScript语言精粹》学习笔记

目录: 第一章  精华 第二章  语法 第三章  对象 第四章  函数 第五章  继承 第六章  数组 第七章  正则表达式 第八章  方法 第九章  代码风格   第一章:精华 ····我不过略有一些讨人喜欢的地方而已,怎么会有什么迷人的魔力?    ——威廉 · 莎士比亚 第二章:语法 1.注释: a).注释一定要精确的描述代码,没有用的注释比没有注释更糟糕.   b).javascript提供两种注释方式 /* */ 与  //  ,分别为多行与单行,但多行注释有时是不安全的,比如用某些正

《javascript语言精粹》读书笔记(三)

从现在起要加快点速度了,书中其实有很多知识对于我来说已经很熟悉了,在此我就简单摘录一下,当然如果非常重要的知识(我认为的,可能有失偏颇),我会写的详细点,可能还会加入我的理解.下面继续: 第五章 继承     继承是大多数编程语言非常重要的主题.良好的继承不仅可以使你的系统有逻辑性和层次感,更重要的是可以减少你的代码量和开发成本. 5.1伪类 在本节中作者试图隐藏prototype对象,而尽量使用一种类似"类"的方式实现继承,他的做法如下: Function.prototype.met

《javascript语言精粹》读书笔记四

第七章 正则表达式 正则表达式是处理字符串的最强道具,没有之一. 通过正则表达式,我们可以非常简便的对字符串进行各种操作,这里就对此就不对这章进行总结,之后对正则表达式进行一次专门的总结. 第八章 方法 '+'运算符在较新的浏览器中,进行过较多的优化,会对该运算符进行优化,比array.join函数运行速度要快的多. array Array.concat和Array.slice函数可以生成新的数组. Array.shift函数通常比pop速度要快. 在使用Array.sort回调函数中,默认会将

Java 第八章 类的方法(一) 笔记

Java 第八章 类的方法(一) 一.类的方法语法: 访问修饰符 返回值类型 方法名(){             方法体:      } 二.方法名的规范:     1.必须以字母."_"或"$"开头     2.可以有数字,但不能以数字开头.     3.如果方法名是多个单词组成 ,第一个单词的首字母小写,      其后单词首字母单词大写.     4.方法名都采用动词. 三.方法的返回值     1.有返回值:必须告知返回值的数据类型,并且返回相应的值. 

c++第八章-(虚方法与抽象方法)

1.虚方法(Virsual Method) 虚方法是继承的,一旦在基类里把某个方法声明为虚方法,在子类里就不可能再把它声明为一个非虚方法了. 在基类里把所有的方法都声明为虚方法会让最终生成的可执行代码的速度变得稍微慢一些,但好处是可以一劳永逸地确保程序的行为符合你的预期. 析构器都是虚方法!从编译的角度看,他们只是普通的方法.如果他们不是虚方法,编译器就会根据他们在编译时的类型而调用那个在基类里定义的版本(构造器),那样往往会导致内存泄露! class Pet { public: Pet(std

软件工程——理论、方法与实践 第八章

第八章 主要讲 1.设计的概念  设计活动分为系统设计和详细设计,设计活动实现从需求分析到软件实现之间的跨越,设计活动结束后需形成设计规格说明书.设计原则模块化.强内聚.弱耦合.可复用.抽象.信息隐藏. 2.软件体系结构包括仓库体系结构.分层体系结构.MVC体系结构.客户机/服务器体系结构和管道和过滤器体系结构几种,各有优劣. 3.系统设计分为识别设计元素.数据存储策略.部署子系统.系统设计评审几方面,系统设计评审需要检查正确性.完整性.一致性和可行性. 4.详细设计有方法建模.属性建模.状态建

“全栈2019”Java第四十八章:重写方法Override

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第四十八章:重写方法Override 下一章 "全栈2019"Java第四十九章:重载与重写对比详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组

大话设计模式-第八章-工厂方法模式

一.UML图 二.包含的角色 (1)抽象工厂 (2)具体工厂 (3)抽象产品 (4)具体产品 三.优势 (1)工厂方法模式是对简单工厂模式的稍微的改进.工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际工作推迟到子类中. (2)与简单工厂模式相比,制造产品的工厂类不再 只有一个,而是每种具体产品类都对应一个生产它的具体工厂类.而这些具体工厂类的共同特征再被提取出来形成一个抽象产品类,这些具体产品类都继承自这个抽象产品类. (3)当需要增加一种产品的时候,需要做的是:增加一种继承自抽象产品