C#学习笔记(十一)

C#学习笔记(十一)

    • 第八章 垃圾回收机制GC与类的静态方法
      • 一、垃圾回收机制GC
        • 1. 对象如何被销毁的
      • 二、类的静态方法
        • 1. 静态方法的使用
        • 2. 为什么会报错
          • 2.1 静态方法定义中的报错
          • 2.2 方法使用中的报错
        • 3. 什么情况下用静态

第八章 垃圾回收机制GC与类的静态方法

一、垃圾回收机制GC

在面向对象编程中,我们需要对象就构造一个对象,对象会越创建越多,但是不断增多的同时,不再被使用的对象,也不会不断的被销毁,也就是对象是有生命周期的,只要正确的使用对象,不会因为操作创建对象,而让内存爆满的。实际中,比如大量的使用了后面我们讲的静态类等等不合理的程序设计才会使内存爆满。

1. 对象如何被销毁的

对象被销毁之前,必须是确保不再被使用的。具体如何判断还得是由**.NET** 专门的垃圾回收机制 GC 来决定,我们不用关心。
GC(Garbage Collection)垃圾回收机制,是.NET 运行时内置的一个专门用来监控和销毁对象的组件。创建完对象后,对象的使用情况被 GC 监控,必要的时候就会销毁,所谓销毁就是把它从内存中删除掉。保证内存合理的空间。
做**.NET 开发最大的好处**就是不用特别关心对象是如何销毁的,而只是尽管使用即可。

二、类的静态方法

前面讲,对象不用的时候可以被销毁,但是在一些特性情况下,如果我们使用对象非常频繁,我们也知道对象创建过程不仅占用内存,而且也是需要时间的,这样的话对于对象使用频率非常高的情况,高频率去创建对象可能在性能上有损失。
为了解决这个问题,.NET 中提供了静态类、静态方法、静态字段等概念。实际使用中在类型之前加上static即可。

1. 静态方法的使用

依旧是在类中添加一个方法

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

其中printf3();,在之前使用过,是一个实例方法。定义一个和printf3();内容相同的静态方法printf4();,会产生报错,如图所示
在这里插入图片描述
在Main中直接调用上述方法,也会产生报错如图所示:
在这里插入图片描述
下面从初始化和内存的角度分析报错原因

2. 为什么会报错
2.1 静态方法定义中的报错
        public double Weight
        {
            get;
            set;
        }
        public string Name
        {
            get;
            set;
        }
        public void printf3(string number ,bool live = true)
        {
            Console.WriteLine(number + ".weighe:" + Weight + "\n" + number + ".name:" + Name);
            if(!live)
            {
                Console.WriteLine("is die");
            }
        }
        public static void printf4(string number, bool live = true)
        {
            Console.WriteLine(number + ".weighe:" + Weight + "\n" + number + ".name:" + Name);
            if (!live)
            {
                Console.WriteLine("is die");
            }
        }

其中Weight 和Name是类中的两个属性,但是都是非静态的。
在这里插入图片描述
首先静态的东西,他的初始化是由 CLR 完成的,也就是不需要我们去初始化。也就是我们什么都不需要做,内存中自动就为其开辟空间创建了实体。也就是静态方法中只能使用已经存在的东西。在初始化静态方法printf4();时它所使用的 Weight和Name并没有被开辟空间。所以不可以使用。

2.2 方法使用中的报错

在这里插入图片描述
这里printf3();产生了报错,是因为它是一个class中的实例方法,程序不会将它自动初始化,而且从始至终在Main中并没有给它开辟空间,所以内存中并没有printf3();的位置那么如何给它开辟空间呢,只能通过创建对象的方式实现。

3. 什么情况下用静态

首先我认为静态的东西持续占用了内存势必会有它的好处,可以提升运行速度,当原有的软件执行效率不高时,可以通过将使用频繁的对象设置为静态的从而提升效率。
开发中,我们不能随便的去使用静态的成员,除非必要。
静态类,同样没有必要,不要用静态类,如果一个类定义成静态的,则里面所有的成员必须都是静态的。当然如果里面的成员都是静态的,或者部分静态,这个类可以不是静态的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CSS 居中那些事

一、父子元素高度确定 简单粗暴, 直接通过设置合适的 padding 或 margin 实现居中 <style>.p {padding: 20px 0;background: rgba(255, 0, 0, 0.1);}.c {width: 40px;height: 20px;background: blue;} </style> <div class"p"><div class"…

第 5 章:vuex

1. 理解 vuex vuex 是什么&#xff1a; 概念&#xff1a;专门在 Vue 中实现集中式状态&#xff08;数据&#xff09;管理的一个 Vue 插件&#xff0c;对 vue 应用中多个组件的共享状态进行集中式的管理&#xff08;读/写&#xff09;&#xff0c;也是一种组件间通信的方式&am…

多IP访问浏览器

添加多个ip地址 nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.61.100/24 ipv4.addresses 192.168.61.200/24 ipv4.addresses 192.168.61.128 ipv4.gateway 192.168.61.2 ipv4.dns 114.114.114.114

linux多窗口调试一些常用命令

在 vim 或 neovim 中使用分屏移动光标的方式&#xff1a; 希望光标从左窗口移动到右侧窗口&#xff1a; 按 Ctrlw 然后按 l&#xff08;小写的 L&#xff09;&#xff0c;光标就会从左边窗口移动到右边窗口。 其它分屏操作&#xff1a; Ctrlw h&#xff1a;移动到左边的窗…

民宿在线预订:SpringBoot技术实践指南

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

【VUE小型网站开发】初始环境搭建

1. 初始化VUE项目 1.1 创建vue项目 1.2 删除多余的界面 根据自己情况删除红框内的文件 清理app页面代码 1.3 引入vue-router 1.3.1 下载vue-router npm install vue-router1.3.2 配置vue-router 在 main.js 或 main.ts 中引入 vue-router import ./assets/main.css im…

MySQL-28.事务-介绍与操作

一.为什么需要事务 -- 事务 -- 删除部门 delete from tb_dept where id 1;-- 删除部门下的员工 delete from tb_emp where dept_id 1; 这样的话就可以成功删除&#xff0c;但是有一个问题&#xff1a;如果部门id1的被成功删除了&#xff0c;但是部门下的员工在删除时出错了…

各种查询sql介绍

1. 关联查询&#xff08;JOIN&#xff09; 关联查询用于从多个表中检索数据。它基于两个或多个表之间的共同字段&#xff08;通常是主键和外键&#xff09;来组合数据。 内连接&#xff08;INNER JOIN&#xff09;&#xff1a; sql SELECT a.name, b.order_date FROM custome…

git add操作,文件数量太多卡咋办呢,

git add介绍 Git的add命令是用于将文件或目录添加到暂存区&#xff08;也就是索引库&#xff09;&#xff0c;以便在后续的提交&#xff08;commit&#xff09;操作中一并上传到版本库的。具体来说&#xff0c;git add命令有以下几种常见用法&#xff1a; 添加单个文件&#…

【每日一题】24.10.14 - 24.10.20

10.14 直角三角形1. 题目2. 解题思路3. 代码实现&#xff08;AC_Code&#xff09; 10.15 回文判定1. 题目2. 解题思路3. 代码实现&#xff08;AC_Code&#xff09; 10.16 二次方程1. 题目2. 解题思路3. 代码实现&#xff08;AC_Code&#xff09; 10.17 互质1. 题目2. 解题思路3…

基于单片机的多功能鱼缸控制系统设计

本设计以STC12C5A60S2单片机为核心的多功能鱼缸控制系统&#xff0c;该系统可分别利用温度传感器、水位传感器和浑浊度传感器来检测鱼缸内部的水温、液体高度和浑浊程度&#xff0c;并在显示屏上进行显示。若检测结果超出阈值范围&#xff0c;则继电器工作从而控制内部环境。通…

Golang | Leetcode Golang题解之第482题秘钥格式化

题目&#xff1a; 题解&#xff1a; func licenseKeyFormatting(s string, k int) string {ans : []byte{}for i, cnt : len(s)-1, 0; i > 0; i-- {if s[i] ! - {ans append(ans, byte(unicode.ToUpper(rune(s[i]))))cntif cnt%k 0 {ans append(ans, -)}}}if len(ans) &…

汽车电子存储解决方案:IS61WV20488FALL

ISSI在SRAM领域的技术创新体现在采用高性能CMOS工艺制造&#xff0c;提供低功耗设计&#xff0c;以及支持宽温度范围的稳定运行。其产品集成了错误更正代码&#xff08;ECC&#xff09;&#xff0c;增强了数据完整性和可靠性。ISSI的SRAM优化了数据处理速度&#xff0c;提供多访…

教你不用下载 maven,不用配置环境变量,在 idea 上创建 maven 项目

我的主页&#xff1a;2的n次方_ 1. Maven Maven是⼀个项⽬管理⼯具, 通过 pom.xml ⽂件的配置获取 jar 包&#xff0c;⽽不⽤⼿动去添加 jar 包&#xff0c;这样就大大的提高了开发效率 2. Maven 的核心功能 2.1. 项目构建 创建第一个 Maven 项目 Maven 提供了标准的…

CDC变更数据捕捉技术是什么?和ETL有什么不同?

一、什么是CDC技术? 变更数据捕获&#xff08;Change Data Capture&#xff0c;简称 CDC&#xff09;是一种用于识别和跟踪数据源中发生变化的数据的技术。 工作原理&#xff1a; 1.监测数据源&#xff1a;CDC 工具会持续监测指定的数据源&#xff0c;如数据库表、文件系统…

Qt开发------容器控件(QWidget,QFrame、QMainWindow、QScrollArea)

目录 一、QWidget 二、QFrame 三、QMainWindow 四、QScrollArea&#xff08;面板滚动&#xff09; 层次结构如下&#xff1a; QObject└── QPaintDevice└── QWidget├── QMainWindow├── QDialog├── QFrame│ ├── QLabel│ ├── QSplitter│ …

react 中的hooks中的useState

(1). State Hook让函数组件也可以有state状态, 并进行状态数据的读写操作 (2). 语法: const [xxx, setXxx] React.useState(initValue) (3). useState()说明:参数: 第一次初始化指定的值在内部作缓存返回值: 包含2个元素的数组, 第1个为内部当前状态值, 第2个为更新状态值的…

关于SSD1306的OLED的显示的研究

文章目录 函数作用参数解释嵌套函数分析主代码分析逻辑流程总结 难点的解析&#xff1a;生成器的主要逻辑分解&#xff1a;每次生成的元组 (pixel_x, pixel_y, pixel_mask)&#xff1a;生成器的整体流程举例总结 反转后的文本绘制竖直布局有问题的旋转180度旋转坐标轴绘制矩形绘…

Chromium form表单post提交过程分析c++

form表单get提交参考之前文章Chromium 前端form表单提交过程分析c-CSDN博客 一、表单post提交测试例子&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>菜鸟教程(runoob.com)</title> </head&…

【火山引擎】AIGC图像风格化 | 风格实践 | PYTHON

目录 1 准备工作 2 实践 代码 效果图 1 准备工作 ① 服务开通 确保已开通需要访问的服务。您可前往火山引擎控制台,在左侧菜单中选择或在顶部搜索栏中搜索需要使用的服务,进入服务控制台内完成开通流程。