第八章 方法

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

  

 

转载于:https://www.cnblogs.com/stone_lv/p/4306017.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/247357.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java生鲜电商平台-促销架构以及秒杀解决方案实战

Java生鲜电商平台-促销架构以及秒杀解决方案实战 背景:随着这几年的电商的大热,我们经常看到一些商家为了促销和快速收益,纷纷推出了秒杀活动.不管是日常的超市里面的促销,明星演唱会门票售卖,还是春节订阅火车票,等等我们都能看到秒杀活动的影子. 1. 构建秒杀活动架构 1.1 说明…

PHP---错误处理(error)

错误的级别 1. notice:提示2. warning:警告3. error:致命错误12345 注:notice和warning报错后继续执行,error报错后停止 错误的提示方法 方法一:显示在浏览器上 方法二:记录在日志中执行 错…

对url给后台传数据的时候特殊字符需要转义

URL中的字符只能是ASCII字符,但是ASCII字符比较少,而URL则常常包含ASCII字符集以外的字符,如非英语字符,汉字,特殊符号等等,所以要对URL进行转换。这个过程就叫做URL编码,或者叫URL转义&#xf…

PHP Cookie处理

Cookie 是什么? cookie是保存在客户端的信息包(一个文件) cookie 常用于识别用户。 cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。通过 PHP,您能…

python装饰器补充

带参装饰器 msg """ 1.QQ 2.wechat """ avg input(验证方式:)def auth(avg):def wrapper(f):def inner(*args,**kwargs):if avg QQ:user input(name)pwd input(password)if user alex and pwd 123456:f()else:print(输入错误)…

PHP-连接数据库

1.2 连接数据库 通过PHP做MySQL的客户端 1.2.1 开启mysqli扩展 在php.ini中开启mysqli扩展 extensionphp_mysqli.dll开启扩展后重启服务器,就可以使用mysqli_函数了,1.2.2 连接数据库 创建news数据库 -- 创建表 drop table if exists news; create …

python模块初始与time、datetime及random

模块初始与time、datetime及random 模块初始 模块的概念(本质为一个py文件) python模块可以将代码量较大的程序分割成多个有组织的、彼此独立但又能互相交互的代码片段,这些自我包含的有组织 的代码段就是模块,模块在物理形式上表…

PHP-面向对象编程教程

1.2 面向对象介绍 1.2.1 介绍 面向对象是一个编程思想。编程思想有面向过程和面向对象 面向过程:编程思路集中的是过程上 面向对象:编程思路集中在参与的对象 以去饭馆吃饭为例: ​ 面向过程:点菜——做菜——上菜——吃饭—…

vue-property-decorator使用指南

在Vue中使用TypeScript时,非常好用的一个库,使用装饰器来简化书写。 一、安装 npm i -S vue-property-decorator PropPropSyncProvideModelWatchInjectProvideEmitComponent (provided by vue-class-component)Mixins (the helper function named mix…

Java生鲜电商平台-统一异常处理及架构实战

Java生鲜电商平台-统一异常处理及架构实战 补充说明:本文讲得比较细,所以篇幅较长。 请认真读完,希望读完后能对统一异常处理有一个清晰的认识。 背景 软件开发过程中,不可避免的是需要处理各种异常,就我自己来说&…

VScode新建自定义模板快捷方式

VS新建vue文件的自定义模板 在使用vscode开发的时候,新建vue文件是不可或缺的,但是VSCode并没有vue文件的初始化模板,这个需要自定义模板。 我们可以使用vscode的snippets在新建.vue 文件后轻松获得一套模板。 具体步骤 打开VSCode -> …

ESLint Unary operator ‘++‘ used.

ESLint Unary operator used. 安装了ESLint&#xff0c;用这个工具之后发现居然不会写代码了。好尴尬~ 感觉自己以前写的JS都是假的... 没有操作 increment(state) {state.count ; },for(let i 0; i < temp.length; i} {//... } 然后报了如下错误 Unary operator u…

sencha touch笔记(6)——路由控制(1)

做项目的时候在界面的跳转上遇到了挺大的问题&#xff0c;本来跳转不想通过路由来控制的&#xff0c;没办法&#xff0c;只能再去看一下路由的跳转方式了。 应用程序的界面发生改变后&#xff0c;可以通过路由让应用程序的界面返回到改变之前的状态&#xff0c;例如浏览器中页面…

Angular rxjs operators 笔记

toArray /*toArray把结果都塞到数组里去 */ const source = interval(1000); const example = source.pipe(take(10),toArray() );example.subscribe(val => console.log(val)); // output: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] toArray /*pairwise把相邻的两个流组成数组 */…

Angular rxjs Subject笔记

BehaviorSubject /*ehaviorSubject接受一个默认参数,相当于new Subject后自动next(aa)之后到行为和Subject一致 */ const behave = new BehaviorSubject(aa); behave.subscribe(res => {console.log(res)

面试39 MySQL读写分离

&#xff08;1&#xff09;如何实现mysql的读写分离&#xff1f; 其实很简单&#xff0c;就是基于主从复制架构&#xff0c;简单来说&#xff0c;就搞一个主库&#xff0c;挂多个从库&#xff0c;然后我们就单单只是写主库&#xff0c;然后主库会自动把数据给同步到从库上去。 …

Angular自学笔记(一)ngModule 元数据

工作硬上开发angular项目,好难啊,上网搜资料教程真的贼少,吐槽真的没什么人用angular,自己学习到处搜集整理的笔记,分享出来,方便查看理解总结。应该适用于angular11系列(更新真快,反正我也不知道之前低版本不同 手动狗头) 什么是angular module(ngModule)? angula…

cookbook_数据结构和算法

1.1将数据分解为单独的变量list_a [1,2,3,4,5,6,7,8,9] a,b,c,d,e,f,g,h,i list_a print(a,b,c,d,e,f,g,h,i) #使用相等数量的参数来接收_,b,c,d,e,f,g,h,_ list_a print(b,c,d,e,f,g,h) #不要的数据使用一个没有用的变量接收 View Code1.2从任意长度的可迭代对象中分解元素…

Angular自学笔记(二)显示数据 绑定属性

显示数据 1.显示数据 ng的模版中,默认用双大括号{{}}绑定组件中的变量显示出来 import {Component } from @angular/core; @Component({selector: app-root,template: `<h1>{{title}}</h1><h2>My favorite hero is: {{myHero}}</h2>`

机器学习概览

什么是机器学习&#xff1f; 广义概念&#xff1a; 机器学习是让计算机具有学习的能力&#xff0c;无需明确的编程 —— 亚瑟萨缪尔&#xff0c;1959 工程概念&#xff1a; 计算机程序利用经验 E 学习任务 T&#xff0c;性能是 P&#xff0c;如果针对任务 T 的性能 P 随着经验 …