C#笔记(3)

好的OOP程序--->模块合理、结构清晰、程序规范、注释明确、运行流畅、维护容易、扩展方法。

OOP是学习各种编程的原则、方法、技巧、经验、模式、架构等。

所有面向对象的编程语言,都是把我们要处理的”数据“和”行为“封装到类中。

1、设计类

2、关联类

3、使用类

类的基本组成与对象

1、类名定义:名词,要求首字母大写,避免单词缩写

2、字段和属性,用来描述这个对象的静态信息(数据存储)

3、方法和接口,用来说明这个对象的行为特征(方法操作)

访问修饰符 class 类名

{

     //定义字段部分

         字段1的类型  字段1

     字段2的类型  字段2

              ...

     //定义属性部分

         属性1的类型   属性1

         属性2的类型   属性2

                         ...

         //定义方法部分

         方法1

         方法2

     ...

}

总结1:一个类其实就是相关数据和特定方法”结构的封装“

类 对象名 = new 类();

总结2:对象是按照类创建的一个具有”特定数据的实例“,通过对象调用类所封装的数据和方法!

访问修饰符

1、类的访问修饰符

作用:限制这个类可被使用的范围

类型:只有俩个(public和internal)

2、类成员访问修饰符

作用:限制类的字段、属性、方法的可访问范围

类型:private(私有的,仅供类的内部使用)、public(公有的,可以通过对象从外面使用)

注意:方法内部的变量,称为:“局部变量”是没有访问修饰符的

类的属性(Property)

1、属性的使用

作用:在OOP中主要用来封装数据

要求:一般采用Pascal命名法,数据类型和字段要一致,使用public修饰。

读取:属性通过get方法,返回私有字段的值。

赋值:属性通过set方法,借助于value给私有字段赋值

本质:属性本身是没有保存数据的,字段才是数据的存储单元。属性的本质是方法

2、属性的定义

private int courseId;//返回私有字段的值

public int CourseId

{

    get{return courseId;}

    //通过value给私有字段赋值

    set{courseId = value;}//C#3.0以后使用自动属性public int CourseId{get;set;}

}

  1. 属性特性
    1. 扩展业务逻辑

在属性get和set方法中添加业务逻辑,从而有效避免非法数据,示例:

            

Private int courseId = 0;Public int CourseId{get{return courseId;}set{if(value<0)courseId = 1000;elsecourseId = value;}}

    2.控制读写操作

根据需求设置为只读属性

//只读属性1,直接去掉set方法,可以在定义的时候初始化

Public string CoureName {get;} = “.Net”;

//只读属性2,直接去掉set方法,并在get中添加业务逻辑

Public string CourseInfo

{

   Get{return $"课程名称:{CourseName}课程编号:{courseId}课程价格:{UnitPrice}";}

}

属性和字段的总结

  1. 字段(成员变量):
    1. 内容使用:字段主要是为类的内部数据交换使用,字段一般是private。
    2. 数据存储:字段只是用来存储数据,如果不是静态字段,生命周期和对象共存亡。
    3. 读写不限:我们可以给字段赋值,也可以获取字段的值(非常常用)(readonly除外)
  2. 属性(字段封装)
    1. 外部使用:属性一般是向外提供数据访问,属性是public修饰,用来对外表示对象的静态特征。
    2. 业务扩展:属性内部可以添加我们需要的业务逻辑,可以避免非法数据,或完成其他相关任务。
    3. 读写可控:属性可以根据需要设置为只读属性,更好的体现面向对象的”封装特性“!也就是安全性。
  3. 使用
    1. 常规化使用:对象本身的”对外“数据保存,都是通过属性完成的,调用者都可以使用。
    2. 强制性使用:公有化字段,在很多时候是无法被解析的。(比如dgv、combobox的显示问题)

方法

  1. 概念:方法表示这个对象能够做什么,也就是封装了这个对象行为。
  2. 类型:实例方法——》静态方法——》(抽象方法、虚方法)——》特殊的:构造方法(对象创建的时候使用)

构造方法的使用:

  1. 作用:构造方法是在对象创建的时候被调用的,所以,在创建对象的时候可以完成一些初始化的任务。

初始化:包括给对象的属性赋值,或从其他对象、文本等获取基础数据。

一个类中,如果没有显示的写出任何构造方法,编译器会默认生成一个无参数的构造方法

可以随时显示的添加一个无参数的构造方法,构造方法无返回值

  1. 构造方法的类型
    1. 无参数构造方法:通常是用来直接初始化对象的属性或”某些不变的数据“。
Public void Dowork1(){//创建对象,得到类的实例,Course()就是无参数的构造方法Course course = new Course();//给对象的字段赋值course.Courseld = 1;course.CourseldName = ".Net全栈";//获取对象的数据Console.WriteLine(course.Type);//调用对象的方法string info = course.ShowCourseInfo();Console.WriteLine(info);}
    1. 有参数的构造方法:让对象创建者,自己传递要初始化的相关数据。

 

  //有参数的构造方法public void Dowork2(){//有参数的构造方法Course course2 = new Course(1,".Net","编程");Console.WriteLine("有三个参数构造方法" + course2.ShowCourseinfo());}public void Dowork3(){//俩个参数的构造方法Course course3 = new Course(2, ".Net");Console.WriteLine("俩个参数的构造方法 "+"Name="+course3.CourseName+";ID="+course3.CourseId);}

代码实例:
 

public class Course{public int CourseId { get; set; }public string CourseName { get; set; }public string Type { get; set; }public string ShowCourseinfo(){return $"课程名称:{CourseName},课程编号:{CourseId},课程系列:{Type}";}//无参数的构造方法public Course(){CourseId = 100;CourseName = ".Net";Type = "编程";//在这里还可以编写读取相关文件或者从其他数据读取的方法或逻辑...}//有参数的构造方法public Course(int courseId, string courseName){//this后面不可能接局部变量,只能接成员变量、属性、方法this.CourseId = courseId;this.CourseName = courseName;}//this代表在当前构造方法之间调用,base调用父类构造方法public Course(int courseId, string courseName, string type) : this(courseId, courseName){Type = type;}}class TestClass4{//无参数的构造方法public void Dowork1(){//无参数构造方法Course course = new Course();Console.WriteLine("无参数构造方法"+course.ShowCourseinfo());}//有参数的构造方法public void Dowork2(){//有参数的构造方法Course course2 = new Course(1,".Net","编程");Console.WriteLine("有三个参数构造方法" + course2.ShowCourseinfo());}public void Dowork3(){//俩个参数的构造方法Course course3 = new Course(2, ".Net");Console.WriteLine("俩个参数的构造方法"+"Name="+course3.CourseName+";ID="+course3.CourseId);}}

对象初始化器的使用

  1. 引入:C#3.0时代开始
  2. 作用:更加灵活的初始化对象的”属性“,可以在创建对象的同时为对象的属性赋值,而无需显式调用构造函数并逐个赋值属性。

代码实例:

 public void Dowork4(){Course course = new Course(){CourseName = ".Net",};Console.WriteLine(course.CourseName);}

构造方法和对象初始化器总结:

  1. 构造方法:
    1. 存在的必要性:一个类中,至少要有一个构造方法。(可以是无参数的,也可以是有参数的)
    2. 调用的特殊性:只能在对象创建的时候,通过new关键字调用。
    3. 使用的强制性:对象的创建,必须调用指定的构造方法,也就是参数必须统一
    4. 语法的特殊性:不能有返回值、构造方法名称必须和类名一样!
  2. 构造方法PK对象初始化器
    1. 相同点:都可以完成对象”属性“初始化
    2. 不同点:
      • 有无强制性:构造方法有强制性,对象初始化器没有强制性,随意使用。
      • 使用的范围:对象初始化器只能完成属性初始化,而构造方法可以完成任何我们需要的初始化任务。
      • 使用的位置:对象初始化器在创建对象的时候使用,而构造方法必须提前写在类中。
      • 出现的时间:构造方法在.Net1.0版本就有,而对象初始化器只能在.Net3.0以上版本才能使用。

成员变量和局部变量同名时:

  1. 成员变量和局部变量同名时,一般是就近原则取变量,如果我们需要舍近求远,则必须添加this。

对象的销毁:

  1. 对象的生存周期:
    1. 对象在内存中不断的”生生死死“,具有生命周期。
  2. 对象在内存中的状态:
    1. 正在引用:程序正在使用的对象
    2. 游离状态:没有引用的对象,已经使用完毕但依然占据空间
  3. 垃圾回收机制(GC)
    1. .Net虚拟机特有的机制,自动运行,并检查对象的状态。
    2. 发现对象不被引用时,会释放其所占空间(销毁)

析构函数:

1、C++中析构函数的使用,当使用delete关键字删除对象时,析构函数会自动调用

~类名(){}

2、托管运行环境下对象的销毁由虚拟机负责,析构函数没多大用途。

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

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

相关文章

LabVIEW 实现 find_nearest_neighbors 功能(二维平面上的最近邻查找)

1. 背景介绍 在数据分析和图像处理领域&#xff0c;经常需要查找给定点的最近邻居点。在LabVIEW中&#xff0c;计算二维平面上多个点之间的欧氏距离&#xff0c;并返回距离最近的几个点是一种常见操作。find_nearest_neighbors 函数用于实现这个功能。 2. 欧氏距离计算 在二维…

Python如何从HTML提取img标签下的src属性

目录 前提准备步骤1. 解析HTML内容2. 查找所有的img标签3. 提取src属性 完整代码 前提准备 在处理网页数据时&#xff0c;我们经常需要从HTML中提取特定的信息&#xff0c;比如图片的URL。 这通常通过获取img标签的src属性来实现。 在开始之前&#xff0c;你需要确保已经安装…

nacos-operator在k8s集群上部署nacos-server2.4.3版本踩坑实录

文章目录 操作步骤1. 拉取仓库代码2. 安装nacos-operator3. 安装nacos-server 坑点一坑点二nacos-ui页面访问同一集群环境下微服务连接nacos地址配置待办参考文档 操作步骤 1. 拉取仓库代码 &#xff08;这一步主要用到代码中的相关yml文件&#xff0c;稍加修改用于部署容器&…

鸿蒙版APP-图书购物商城案例

鸿蒙版-小麦图书APP是基于鸿蒙ArkTS-API12环境进行开发&#xff0c;不包含后台管理系统&#xff0c;只有APP端&#xff0c;页面图书数据是从第三方平台(聚合数据)获取进行展示的&#xff0c;包含登录&#xff0c;图书类别切换&#xff0c;图书列表展示&#xff0c;图书详情查看…

Vulnhub靶场案例渗透[8]- HackableII

文章目录 一、靶场搭建1. 靶场描述2. 下载靶机环境3. 靶场搭建 二、渗透靶场1. 确定靶机IP2. 探测靶场开放端口及对应服务3. 扫描网络目录结构4. ftp文件上传漏洞5. 反弹shell6. 提权 一、靶场搭建 1. 靶场描述 difficulty: easy This works better with VirtualBox rather t…

Pycharm 配置 Poetry

Python 环境安装 参考以下&#xff1a; 官网安装步骤 CODA方式安装 Poetry 安装 Poetry在windows下的安装使用 1.下载软件包 下载地址 2.获取安装脚本下载地址 3.使用命令安装 打开cmd&#xff0c;进入安装包和脚本文件所在目录&#xff0c;执行命令&#xff1a; python …

反转链表

反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例 3&#xff1…

【Docker】Mac安装Docker Desktop导致磁盘剩余空间较少问题如何解决?

目录 一、背景描述 二、解决办法 三、清理效果 四、理论参考 解决方法 1. 清理未使用的 Docker 镜像、容器和卷 2. 查看 Docker 使用的磁盘空间 3. 调整 Docker 的存储位置 4. 增加磁盘空间 5. 调整 Docker Desktop 配置 6. 使用 Docker 清理工具&#xff08;例如 D…

SQL Server 查询设置 - LIKE/DISTINCT/HAVING/排序

目录 背景 一、LIKE - 模糊查询 1. 通配符 % 2. 占位符 _ 3. 指定集合 [] 3.1 表示否定 ^ 3.2 表示范围 - 4. 否定 NOT 二、DISTINCT - 去重查询 三、HAVING - 过滤查询 四、小的查询设置 1. ASC|DESC - 排序 2. TOP - 限制 3. 子查询 4. not in - 取补集&…

Android OpenGL ES详解——立方体贴图

目录 一、概念 二、如何使用 1、创建立方体贴图 2、生成纹理 3、设置纹理环绕和过滤方式 4、激活和绑定立方体贴图 三、应用举例——天空盒 1、概念 2、加载天空盒 3、显示天空盒 4、优化 四、应用举例——环境映射:反射 五、应用举例——环境映射:折射 六、应用…

pipx安装提示找不到包

执行&#xff1a; pipx install --include-deps --force "ansible6.*"WARNING: Retrying (Retry(total4, connectNone, readNone, redirectNone, statusNone)) after connection broken by NewConnectionError(<pip._vendor.urllib3.connection.HTTPSConnection …

VMware 17虚拟Ubuntu 22.04设置共享目录

VMware 17虚拟Ubuntu 22.04设置共享目录 共享文件夹挂载命令&#xff01;&#xff01;&#xff01;<font colorred>配置启动自动挂载Chapter1 VMware 17虚拟Ubuntu 22.04设置共享目录一、卸载老版本二、安装open-vm-tools<font colorred>三、配置启动自动挂载四、添…

Python用CEEMDAN-LSTM-VMD金融股价数据预测及SVR、AR、HAR对比可视化

全文链接&#xff1a;https://tecdat.cn/?p38224 分析师&#xff1a;Duqiao Han 股票市场是一个复杂的非线性系统&#xff0c;股价受到许多经济和社会因素的影响。因此&#xff0c;传统的线性或近线性预测模型很难有效、准确地预测股票指数的价格趋势。众所周知&#xff0c;深…

ubuntu20.04默认的python3.8升级到python3.10

Python 3.8 于 2019 年 10 月发布&#xff0c;距今已有五年时间。2024 年 10 月是 Python 3.8 版本发布的最后一个月&#xff0c;从 2024 年 10 月开始&#xff0c;如果存在安全错误&#xff0c;Python 开发团队将不会修复该错误。有必要把python3.8升级python3.10。 新加apt源…

数据结构 ——— 层序遍历链式二叉树

目录 链式二叉树示意图​编辑 何为层序遍历 手搓一个链式二叉树 实现层序遍历链式二叉树 链式二叉树示意图 何为层序遍历 和前中后序遍历不同&#xff0c;前中后序遍历链式二叉树需要利用递归才能遍历 而层序遍历是非递归的形式&#xff0c;如上图&#xff1a;层序遍历的…

DevOps工程技术价值流:加速业务价值流的落地实践与深度赋能

DevOps的兴起&#xff0c;得益于敏捷软件开发的普及与IT基础设施代码化管理的革新。敏捷宣言虽已解决了研发流程中的诸多挑战&#xff0c;但代码开发仅是漫长价值链的一环&#xff0c;开发前后的诸多问题仍亟待解决。与此同时&#xff0c;虚拟化和云计算技术的飞跃&#xff0c;…

python json详解

json 是 Python 中用于处理 JSON 数据的标准库。JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于人类阅读和编写&#xff0c;同时也易于机器解析和生成。Python 的 json 模块提供了将 Python 对象与 JSON 数据相互转换的功…

WPS宏编辑器开发,单元格内容变更自动触发事件

WPS中Excel的“触发器” 写在前面宏的开发1、切换宏编辑器开发环境2、小练习&#xff1a;自定义函数3、完成功能需求&#xff1a;单元格内容变更自动触发事件 总结 写在前面 我先生用EXCEL做了一张学生存款表。设计得很简单&#xff0c;A学生已存款X元&#xff0c;A学生再次存…

新版Apache Tomcat ⽬目录文件讲解(笔记)

简介&#xff1a;Tomcat⽬目录⽂文件讲解 bin &#xff08;关注&#xff09; 启动和关闭tomcat脚本 startup.sh/startup.bat (Linux平台或Mac上的启动脚本/Windows平台上的启动脚本) shutdown.sh/shutdown.bat (Linux平台或Mac上的关闭脚本/Windows平台上的关闭脚本) conf&am…

Go 语言已立足主流,编程语言排行榜24 年 11 月

Go语言概述 Go语言&#xff0c;简称Golang&#xff0c;是由Google的Robert Griesemer、Rob Pike和Ken Thompson在2007年设计&#xff0c;并于2009年11月正式宣布推出的静态类型、编译型开源编程语言。Go语言以其提高编程效率、软件构建速度和运行时性能的设计目标&#xff0c;…