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. 实例方法使用总结

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

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

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

相关文章

代码随想录算法训练营第二天(补) | 滑动窗口、模拟、前缀和

目录 3.4 长度最小的子数组 3.5螺旋矩阵II 3.6 区间和 文章讲解:[58. 区间和 | 代码随想录 3.4 长度最小的子数组 题目链接:. - 力扣(LeetCode) 文章讲解:代码随想录 视频讲解:拿下滑动窗口&#xff…

Linux历史

Linux 于 1991 年由芬兰学生 Linus Torvalds 作为个人项目开始,旨在创建一个新的免费操作系统内核。在其历史发展中,Linux 内核经历了持续的增长。自 1991 年首次发布源代码以来,Linux 内核从少量的 C 语言文件,且受限于禁止商业发…

机器视觉基础系列四—简单了解背景建模算法

机器视觉基础系列四—简单了解背景建模算法 首先我们应该了解的是背景建模的定义是什么?又有哪些应用场景呢? 背景建模是指通过分析视频序列中的像素值变化情况,从中提取出静态背景部分,并将其用于目标检测、运动跟踪等计算机视觉…

渗透测试导论

渗透测试的定义和目的 渗透测试(Penetration Testing)是一项安全演习,网络安全专家尝试查找和利用计算机系统中的漏洞。 模拟攻击的目的是识别攻击者可以利用的系统防御中的薄弱环节。 这就像银行雇用别人假装盗匪,让他们试图闯…

LeetCode1004.最大连续1的个数

题目链接:1004. 最大连续1的个数 III - 力扣(LeetCode) 1.常规解法(会超时) 遍历数组,当元素是1时个数加一,当元素是0时且已有的0的个数不超过题目限制时,个数加一,若上…

Lumerical学习——优化和参数扫描(Optimization and parameter sweeps)

一、概要介绍 这部分介绍优化和参数扫描项目设定的方法。在有大量数据模拟计算过程中这个特性允许用户使处理方法自动地查找期望的参数值。 ① 创建一个参数扫描任务 ② 创建一个优化任务 ③ 创建一个良率分析任务 ⑤ 打开所选择项目的编辑窗口,编辑其属性…

基于Java+SpringBoot+Uniapp的博客系统设计与实现

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…

嵌入式C++中内存分配基本实现方法

大家好,今天主要给大家分享一下,如何使用计算机中的内存空间进行分配,观察具体现象。 第一:C语言动态空间分配方式 第二:C++中动态内存分配方法 new 可以自动计算数据类型的大小 与 类型的转换 malloc 只能手动进行。 2.new 可以在分配空间的时候初始化 malloc 不行。 第三…

【优选算法】——双指针(上篇)!

🌈个人主页:秋风起,再归来~🔥系列专栏:C刷题算法总结🔖克心守己,律己则安 目录 前言:双指针 1. 移动零(easy) 2. 复写零(easy) 3…

计数型信号量

一,什么是计数型信号量? 计数型信号量相当于队列长度大于1 的队列,因此计数型信号量能够容纳多个资源,这在计数型信号量被创建的时候确定的。 计数型信号量相关 API 函数 函数描述xSemaphoreCreateCounting()使用动态方法创建计数…

工业相机详解及选型

工业相机相对于传统的民用相机而言,具有搞图像稳定性,传输能力和高抗干扰能力等,目前市面上的工业相机大多数是基于CCD(Charge Coupled Device)或CMOS(Complementary Metal Oxide Semiconductor)芯片的相机。 一,工业相机的分类 …

Java 虚拟机实战(基础篇 1万字)

此笔记来自于黑马程序员 基础篇 初识 JVM(Java Virtual Machine) 什么是 JVM JVM 本质上是一个运行在计算机上的程序,他的职责是运行 Java 字节码文件 JVM 的功能 翻译成字节码 即时编译 Java语言如果不做任何优化,性能不如C、C等语言。Java 支持跨…

嬴图 | 图数据库系列 之 图算法与可解释性

2024年诺贝尔物理学奖颁发给了机器学习与神经网络领域的研究者,这是历史上首次出现这样的情况。这项奖项原本只授予对自然现象和物质的物理学研究作出重大贡献的科学家,如今却将全球范围内对机器学习和神经网络的研究和开发作为了一种能够深刻影响我们生…

手机怎么玩GTA5?GameViewer远程助你手机畅玩GTA5侠盗飞车

原来手机也可以玩电脑游戏!如果你想随时随地用手机玩GTA5,网易GameViewer远程能帮你实现,它的按键映射功能会让你在体验GTA5时非常好。你不仅可以享受4K蓝光144帧高画质的 驾驶、第三人称射击,还有开放世界探索,还可以…

服务器软件之Tomcat

服务器软件之Tomcat 服务器软件之Tomcat 服务器软件之Tomcat一、什么是Tomcat二、安装Tomcat1、前提:2、下载3、解压下载的tomcat4、tomcat启动常见错误4.1、tomcat8.0 startup报错java.util.logging.ErrorManager: 44.2、java.lang.UnsatisfiedLinkError 三、Tomca…

高级算法设计与分析 学习笔记13 线性规划

注意是线性规划不是动态规划哦 好家伙,这不是凸优化吗? 凸优化标准形式: 先改成统一最大化(凸优化那边怎么是统一最小化?) 原来的x2正负无所谓,但我希望每个x都是有限制的,所以把它改…

MySQL初识

在了解什么是MySQL前,我们先了解一下什么是数据库?? 1. 数据库简介 1.1 什么是数据库 数据库是20世纪60年代末发展起来的⼀项重要技术,已经成为计算机科学与技术的⼀个重要分⽀。数据库技术主要是⽤来解决数据处理的⾮数值计算问…

基于SpringBoot+Vue+uniapp的电影信息推荐APP的详细设计和实现

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不…

PCL 点云配准-4PCS算法(粗配准)

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 加载点云数据 2.1.2 执行4PCS粗配准 2.1.3 可视化源点云、目标点云和配准结果 2.2完整代码 三、实现效果 3.1原始点云 3.2配准后点云 PCL点云算法汇总及实战案例汇总的目录地址链接…

猫分鱼干 -算法题解

题目 假如有一群猫排成一行,要分配鱼干,每一只猫都有一个等级值。你作为管理员有很多鱼干但是需要按下边的分配制度分配: 1. 每一只猫至少要分配一斤鱼干,鱼干分配最小单位是斤,必须保证是整数。 2. 猫比他们邻居有更高…