当前位置: 首页 > news >正文

C#学习笔记(十)

C#学习笔记(十)

    • 第七章 对象的构造方法与实例方法
      • 一、对象的构造方法
        • 1. 构造方法初识
        • 2. 构造方法的创建
        • 3. this关键字
        • 4. 构造方法的规范和重载
          • 4.1 构造方法的规范
        • 5. 对象初始化器
          • 5.1 对象初始化器和构造方法的区别
      • 二、对象的实例方法
        • 1. 简单应用
        • 2.实例方法各种形式
          • 2.1 返回值
          • 2.2 访问修饰符
          • 2.3 命名规范
          • 2.4 输入参数
          • 2.5 输入参数的灵活用法
            • 2.5.1 默认参数
            • 2.5.2 输入参数的顺序
        • 3. 实例方法使用总结

第七章 对象的构造方法与实例方法

对象主要封装两块内容,一个是属性,用来实现对象数据的存取。一个是方法,用来实现对象的操作,操作也叫行为。

一、对象的构造方法

1. 构造方法初识

什么是构造方法呢?构造方法(Constructor)又称为构造器,顾名思义,就是在对象构造的时候所调用的方法。对象构造也就是对象创建,或者说我们通过 new 来创建对象实例。回顾对象创建的时候代码是这么写的:Class2 test2 = new Class2(); 其实 new 后面的 Class2()这个就是一个无参数构造方法的调用。

2. 构造方法的创建

之前的学习中一直都在使用new + 构造方法的方式来创建对象,但是我们并不没有去定义和编写构造方法,那么构造方法从哪里来的。
其实在类中没有写任何构造方法时,编译器会帮我们自动生成一个默认的无参数的构造方法!
那么编译器创建的默认构造方法在哪长什么样子。如图所示被框起来部分就是一个无参数的构造方法,只不过是我们手动编写的,如果我们不编写任何构造方法,那么系统会在内部自动创建一个无参数的构造方法。
在这里插入图片描述
那么有参数的构造方法如何创建

    public class Class4{// 无参数构造方法public Class4(){ }// 有参数构造方法public Class4(double Weight, string b){this.Name = b;this.Weight = Weight;}public double Weight{get;set;}public string Name{get;set;}}

运行结果:
在这里插入图片描述

3. this关键字

上述构造方法中,带参数的构造方法使用了this对对象中的属性进行赋值,这是更加规范的写法,不加行吗?:不加也行。也不行
在这里插入图片描述
在这里插入图片描述

可以看到将name前的this去掉依旧是没有报错,属性也可以正常赋值。
但是将Weight前的this去掉也是没有报错,但是却不可以正常赋值了,这是因为构造方法的参数名称Weight和属性的名称一样了,按照“就近原则”如果我们不添加 this,直接写Weight = Weight;那默认都是构造方法中的参数,这样自己给自己赋值就出问题了
所以this使用this可以起到一个很好的区分作用。规范的代码应该使用this。

4. 构造方法的规范和重载
4.1 构造方法的规范
public class 类名称 {public 类名称(参数类型 1 参数名 1,参数类型 2 参数名 2{//在这里写具体的初始化内容…}属性......方法......
}
  • 构造方法写在类的内部
  • 构造方法名称必须和类名一样。
  • 构造方法不能有任何返回值,所以返回值类型也不用写。
  • 构造方法可以有参数,也可以没有参数。
  • 构造方法可以有多个,实现重载。上述中的一个无参数的构造方法和一个有参数的构造方法就是利用了重载
5. 对象初始化器

对象初始化器可以更加灵活的来初始化对象的属性
还是上述中的类

    public class Class4{// 无参数构造方法public Class4(){ }public Class4(double Weight, string b){this.Name = b;this.Weight = Weight;}public double Weight{get;set;}public string Name{get;set;}}

创建一个该类的对象

            Class4 ATQ1 = new Class4(){Weight = 1219.99};Console.WriteLine("weighe:" + ATQ1.Weight + "\nname:" + ATQ1.Name);

运行结果如图
在这里插入图片描述
但是Class4中并没有初始化参数只有一个Weight的构造方法。
这并不是构造方法,而是在.NET3.0 时代出现的对象初始化器,那么对象初始化器和构造方法有什么区别?

5.1 对象初始化器和构造方法的区别

首先对象初始化器只能初始化“属性”,不能初始化其他的,而构造方法可以做任何初始化内容。其次,对象初始化器没有强制性,构造方法具有强制性。要做到区别对待,灵活运用。

二、对象的实例方法

其实对象的实例方法就是开始学习的时候class中的方法(或者说函数),下面展开它的详细用法。

1. 简单应用

比如说之前生成一个对象并赋值: Class4 atq1 = new Class4(125,"流星");,然后将该对象的内容打印出来: Console.WriteLine("weighe:"+atq1.Weight +"\nname:"+atq1.Name);每次打印都需要编写相应的内容。现在通过在class中编写实例方法直接解决这个问题。

    public class Class4{// 无参数构造方法public Class4(){ }public Class4(double Weight, string b){this.Name = b;this.Weight = Weight;}public double Weight{get;set;}public string Name{get;set;}public void printf(){Console.WriteLine("weighe:" + Weight + "\nname:" + Name);}}

运行结果:

在这里插入图片描述

2.实例方法各种形式

实例方法的具体规范如下:

访问修饰符 返回值类型 方法名(参数 1,参数 2) 
{//这里编写方法的主体(功能实现的具体过程)return 返回值;//如果没有返回值,则不需要写该语句
}
2.1 返回值

可以有返回值也可以没有返回值

2.2 访问修饰符

访问修饰符有 public、private,如果不写默认就是 private

2.3 命名规范

方法名称请使用 Pascal 命名法,也就是首字母大写方式命名

2.4 输入参数

实例方法可以输入参数,比如上面的例子,我想把对象的名称加入到打印的内容中,于是在原有的class中添加新的实例方法:

        public void printf2(string number){Console.WriteLine(number+".weighe:" + Weight + "\n"+number+".name:" + Name);}

运行结果:
在这里插入图片描述

2.5 输入参数的灵活用法
2.5.1 默认参数

在原来的class中添加新的方法

        public void printf3(string number ,bool live = true){Console.WriteLine(number + ".weighe:" + Weight + "\n" + number + ".name:" + Name);if(!live){Console.WriteLine("is die");}}

其中live已经给了它默认参数true
运行结果
在这里插入图片描述

调用这个方法的时候,可以不用写这个参数,就可以使用默认值,如果用户给了具体的值,则使用具体参数值。
注意:带参数默认值的参数,必须放到最后,不能放到中间或者前面,因为编译器不会跳着位置去对应参数。

2.5.2 输入参数的顺序

有时候输入参数较多,那么记不住它的顺序如何解决,通过“命名参数”可以解决这个问题,如下图所示:
在这里插入图片描述

            atq2.printf3("atq2",false);atq2.printf3(live:false,number: "atq2");
3. 实例方法使用总结

第一、正确的确定方法的修饰符、命名的规范性。
第二、方法的返回值要根据需要设计,可以是基本数据类型、对象类型,集合类型
第三、方法参数不宜过多,过多会造成调用困难。
第四、灵活的使用参数默认值、命名参数,解决调用的方便性问题。

相关文章:

C#学习笔记(十)

C#学习笔记(十) 第七章 对象的构造方法与实例方法一、对象的构造方法1. 构造方法初识2. 构造方法的创建3. this关键字4. 构造方法的规范和重载4.1 构造方法的规范 5. 对象初始化器5.1 对象初始化器和构造方法的区别 二、对象的实例方法1. 简单应用2.实例…...

出手!快手可灵开源版,AI视频生成整合包!

在2024年,人工智能领域迎来了一位新星——AI视频生成技术。在这场技术革命中,快手推出的可灵AI无疑是最耀眼的明星之一。然而,其高昂的年费让不少用户望而却步,毕竟数千元的开销对于普通人来说是个不小的负担。 幸运的是&#xff…...

【Linux】进程池

目录 进程池 进程池的概念: 手搓进程池: 1、创建信道和子进程 2、通过channel控制子进程 3、回收管道和子进程 进程池 进程池的概念: 定义一个池子,在里面放上固定数量的进程,有需求来了,就拿一个池中…...

实验23:DA呼吸灯实验

电路硬件: 实现功能: 代码: public.h #ifndef _public_H #define _public_H#include "reg52.h" //#include "key.h"typedef unsigned int u16; typedef unsigned char u8;void delay_10us(u16 n); void delay_ms(u16 ms);#endif public.c #include …...

安科瑞智慧能源管理系统EMS3.0在浙江某能源集团有限公司的应用

安科瑞戴婷 Acrel-Fanny 一、项目背景 浙江某能源集团有限公司位于浙江省宁波前湾新区,主营业务范围包括了储能技术服务,光伏风力发电技术服务,充电桩技术服务,新能源项目的施工以及为企业提供配电房运维服务。 随着新能源的兴…...

线性代数学习

1.标量由只有一个元素的张量表示 import torchx torch.tensor([3,0]) y torch.tensor([2,0])x y, x * y, x / y, x**y 2.可以将向量视为标量值组成的列表 x torch.arange(4) x 3.通过张量的索引访问任一元素 x[3] 4.访问张量长度 len(x) 5.只有一个轴的张量&#xff0c…...

FineReport 数据显示格式

原始 修改 选择「单元格元素>格式」,选择「日期型」,改成 「yyyy 年 MM 月 dd 日」,如下图所示: 注:若列表中没有 yyyy 年 MM 月 dd 日 格式,可手动输入 选择运货费数据列单元格,选择「单元…...

leetcode.204.计数质数

#中等#枚举 给定整数 n ,返回 所有小于非负整数 n 的质数的数量 。 埃氏筛 枚举没有考虑到数与数的关联性,因此难以再继续优化时间复杂度。接下来我们介绍一个常见的算法,该算法由希腊数学家厄拉多塞(Eratosthenes)提…...

Mysql环境安装

1,下载压缩包 下载压缩包解压 2,配置环境变量 i,高级系统设置-->环境变量-->系统变量-->path-->添加mysql的bin目录路径 ii,新建my.ini文件 basedir:MYSQL的路径 datadir:这个data路径不用手动创建&am…...

请问平面仓系统的盘点如何做?

盘点流程 一、盘点任务生成 手动发起:仓库管理人员可以根据实际需要,在系统中手动发起库存盘点任务。例如,定期进行全盘、抽盘或者在发现库存数据异常时发起盘点。自动触发:系统可以设置自动触发盘点的条件,如每隔一…...

STM32笔记(1)GPIO之点亮LED

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 总结 第一步:先看原理图。PB0输出高电平是,LED1点亮。 初始化完成了两项工作: (1)从时钟上启动所用GPIO所在的总线&#xff1b…...

自动化工具

自动化工具确保测试准确性的关键在于采取一系列综合性措施,包括但不限于以下几点: 环境一致性:确保测试环境与生产环境尽可能相似,减少环境差异导致的结果不准确。可以通过容器技术(如Docker和Kubernetes)确…...

CTFHUB技能树之HTTP协议——响应包源代码

开启靶场,打开链接: 是个贪吃蛇小游戏,看不出来有什么特别的地方 用burp抓包看看情况: 嗯?点击“开始”没有抓取到报文,先看看网页源代码是什么情况 居然直接给出flag了,不知道这题的意义何在 …...

Java会话技术,拦截器,过滤器,登录校验

目录 1.会话: 2.会话跟踪: 3.会话跟踪方案: 客户端会话跟踪技术:Cookie 服务端会话跟踪技术:Session JWT令牌技术(https://jwt.io/) 定义: 优点: 缺点: 组成: …...

Spring Security 如何进行权限验证

阅读本文之前,请投票支持这款 全新设计的脚手架 ,让 Java 再次伟大! FilterSecurityInterceptor FilterSecurityInterceptor 是负责权限验证的过滤器。一般来说,权限验证是一系列业务逻辑处理完成以后,最后需要解决的…...

计算机砖头书的学习建议

纸上得来终觉浅,绝知此事要躬行,技术来源于实践,光看不练意义不大,过阵子全忘记,并且没有实践来深化理论认知。 “砖头书”通常指的是那些厚重、内容详实且权威的书籍,对于计算机科学领域而言,…...

我与C语言二周目邂逅vlog——7.预处理

C语言预处理详解 C语言预处理是编译过程中的重要组成部分,用于对源代码进行文本替换和修改。预处理发生在编译的前期,通过特定的指令来控制代码的编译行为,最终生成可以交给编译器进行进一步处理的代码。预处理的目的是简化代码编写&#xf…...

Python无监督学习中的聚类:K均值与层次聚类实现详解

📘 Python无监督学习中的聚类:K均值与层次聚类实现详解 无监督学习是一类强大的算法,能够在没有标签的数据集中发现结构与模式。聚类作为无监督学习的重要组成部分,在各类数据分析任务中广泛应用。本文将深入讲解聚类算法中的两种…...

C++ 中 new 和 delete 详解,以及与 C 中 malloc 和 free 的区别

1. C 中 new 和 delete 的基本用法 在 C 中,new 和 delete 是用来动态分配和释放内存的关键字,它们是面向对象的替代方式,提供了比 C 语言更优雅的内存管理工具。 1.1 new 的使用 new 用于从堆中分配内存,并且自动调用对象的构造…...

YOLOv11来了 | 自定义目标检测

概述 YOLO11 在 2024 年 9 月 27 日的 YOLO Vision 2024 活动中宣布:https://www.youtube.com/watch?vrfI5vOo3-_A。 YOLO11 是 Ultralytics YOLO 系列的最新版本,结合了尖端的准确性、速度和效率,用于目标检测、分割、分类、定向边界框和…...

Vue3 集成Monaco Editor编辑器

Vue3 集成Monaco Editor编辑器 1. 安装依赖2. 使用3. 效果 Monaco Editor (官方链接 https://microsoft.github.io/monaco-editor/)是一个由微软开发的功能强大的在线代码编辑器,被广泛应用于各种 Web 开发场景中。以下是对 Monaco Editor 的…...

一文详解Mysql索引

背景 索引是存储引擎用于快速找到一条记录的数据结构。索引对良好的性能非常关键。尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要。接下来,就来详细探索一下索引。 索引是什么 索引(Index)是帮助数据库高效获取数据的…...

基于JAVA+SpringBoot+Vue的旅游管理系统

基于JAVASpringBootVue的旅游管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末附源码下载链接🍅 哈喽兄…...

STM32_实验3_控制RGB灯

HAL_Delay 是 STM32 HAL 库中的一个函数,用于在程序中产生一个指定时间的延迟。这个函数是基于系统滴答定时器(SysTick)来实现的,因此可以实现毫秒级的延迟。 void HAL_Delay(uint32_t Delay); 配置引脚: 点击 1 到 IO…...

RISC-V笔记——Pipeline依赖

1. 前言 RISC-V的RVWMO模型主要包含了preserved program order、load value axiom、atomicity axiom、progress axiom和I/O Ordering。今天主要记录下preserved program order(保留程序顺序)中的Pipeline Dependencies(Pipeline依赖)。 2. Pipeline依赖 Pipeline依赖指的是&a…...

构建后端为etcd的CoreDNS的容器集群(六)、编写自动维护域名记录的代码脚本

本文为系列测试文章,拟基于自签名证书认证的etcd容器来构建coredns域名解析系统。 一、前置文章 构建后端为etcd的CoreDNS的容器集群(一)、生成自签名证书 构建后端为etcd的CoreDNS的容器集群(二)、下载最新的etcd容…...

Leetcode 剑指 Offer II 098.不同路径

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下…...

LabVIEW智能螺杆空压机测试系统

基于LabVIEW软件开发的螺杆空压机测试系统利用虚拟仪器技术进行空压机的性能测试和监控。系统能够实现对螺杆空压机关键性能参数如压力、温度、流量、转速及功率的实时采集与分析,有效提高测试效率与准确性,同时减少人工操作,提升安全性。 项…...

在 Ubuntu 22.04 上安装 PHP 8.2

在 Ubuntu 22.04 上安装 PHP 8.2,可以按照以下步骤进行: 更新系统软件包: 首先,确保你的系统软件包是最新的。 sudo apt update sudo apt upgrade 安装 PHP PPA(Personal Package Archive): U…...

Java生死簿管理小系统(简单实现)

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……) 2、学会Oracle数据库入门到入土用法(创作中……) 3、手把手教你开发炫酷的vbs脚本制作(完善中……) 4、牛逼哄哄的 IDEA编程利器技巧(编写中……) 5、面经吐血整理的 面试技…...