zoukankan      html  css  js  c++  java
  • 第八章 方法

    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. 总结

      

  • 相关阅读:
    简体繁体互译代码段:
    require.js使用baseUrl + paths导入文件配置的3种方法
    vue + vue-router + vue-resource 基于vue-cli脚手架 --->笔记
    解决webstorm卡顿问题
    js 函数闭包内部返回函数体调用方法难点解答
    java学习笔记之位运算符
    java集合类学习笔记之LinkList
    java集合类学习笔记之ArrayList
    java学习笔记之对象序列化
    springboot集成巨杉数据库
  • 原文地址:https://www.cnblogs.com/stone_lv/p/4306017.html
Copyright © 2011-2022 走看看