C#常识篇(三)

内置类型字节大小

以下是 C# 中常见内置数据类型的字节大小:

bool(布尔)类型:通常为 4 或者 8 字节。在不同平台上可能会有所不同。

byte(无符号字节)类型:始终为 1 字节。

sbyte(有符号字节)类型:始终为 1 字节。

char(Unicode 字符)类型:通常为 2 字节。

short(短整型)类型:通常为 2 字节。

ushort(无符号短整型)类型:通常为 2 字节。

int(整型)类型:通常为 4 字节。

uint(无符号整型)类型:通常为 4 字节。

long(长整型)类型:通常为 8 字节。

ulong(无符号长整型)类型:通常为 8 字节。

float(单精度浮点型)类型:通常为 4 字节。

double(双精度浮点型)类型:通常为 8 字节。

decimal(高精度十进制型)类型:通常为 16 字节。

using语句 

using语句用于正确使用可释放对象(实现IDisposable接口),using语句块中无论是否发生异常都会释放可释放对象。using语句可声明多个可释放对象,释放将按照声明的相反顺序进行。常见的文件I/O操作可以使用using语句。

装箱和取消装箱 

装箱是将值类型转换为 object 类型或由此值类型实现的任何接口类型的过程。 常见语言运行时 (CLR) 对值类型进行装箱时,会将值包装在 System.Object 实例中并将其存储在托管堆中。 取消装箱将从对象中提取值类型。 装箱是隐式的;取消装箱是显式的。

静态存储区和托管堆的区别 

静态存储区(Static Storage Area)和托管堆(Managed Heap)是两个与内存管理相关的概念,通常用于描述不同的内存分配和管理方式。


静态存储区:静态存储区是指用于存储静态变量的内存区域。静态变量是在程序编译时就被分配内存,并在整个程序生命周期内都存在的变量。这些变量通常包括全局变量、静态类成员变量以及静态局部变量。静态存储区的生命周期与程序的生命周期相同,在程序启动时被分配内存,在程序结束时释放内存。


托管堆:托管堆是托管语言(例如C#、Java等)中用于存储动态分配的对象的内存区域。在C#中,所有的类实例都是在托管堆上分配的。与静态存储区不同,托管堆上的对象的生命周期不是固定的,它们会在不再被引用时由垃圾回收器进行回收。


总结:虽然它们都是用于存储数据的内存区域,但是它们所存储的数据类型和生命周期是不同的,因此静态存储区和托管堆在内存管理中扮演不同的角色。


类型

优点

缺点

静态存储区

1.全局访问:访问范围广;

2.生命周期长:与程序生命周期相同;

3.固定内存位置:有利于提高访问速度。

1.内存分配固定:无法动态分配和释放内存,可能导致内存浪费问题以及降低程序灵活性;

2.线程不安全性:多线程下需要额外的同步进制保证线程安全。

托管堆

1.动态内存管理:动态分配和释放内存,有助于节省内存以及提高程序灵活性;

2.垃圾回收:避免内存泄漏和提高内存利用率;

3.对象生命周期管理:由GC自动管理。

1.垃圾回收开销:GC对托管堆内存的管理会带来一定的性能开销;
2.内存碎片化:内存的分配可能导致内存碎片的产生,从而降低内存利用率;
3.动态内存分配开销:动态内存分配和释放会带来一定的性能开销。

输入流和输出流 

输入流(Input Stream)和输出流(Output Stream)是在计算机编程中常用的概念,用于处理数据流的读取和写入。


输入流:

1.输入流用于从数据源(如文件、网络连接、键盘输入等)读取数据。

2.输入流的主要任务是从外部数据源读取数据并提供给程序使用。

3.输入流通常提供一系列的读取方法,例如读取一个字节、读取一段字节数组、读取一个字符等。

示例:从文件中读取数据、从网络连接中接收数据等。


输出流:

1.输出流用于向目标位置(如文件、网络连接、屏幕显示等)写入数据。

2.输出流的主要任务是将程序中的数据写入到外部目标位置。

3.输出流通常提供一系列的写入方法,例如写入一个字节、写入一段字节数组、写入一个字符等。

示例:向文件中写入数据、向网络连接发送数据等。


总结:在许多编程语言中,包括Java、C#、Python等,都提供了用于处理输入流和输出流的相关类库或模块。通过使用这些类库或模块,程序可以方便地与外部数据源进行交互,实现数据的读取和写入操作。输入流和输出流的概念在各种应用场景中都有着广泛的应用,如文件处理、网络通信、数据传输等。

继承中方法的重写 

(1)派生类可以重写的基类方法

1.基类中使用virtual关键字进行限定的方法(简称“虚方法”);

2.在派生类中使用new关键字对与基类同名的方法进行重写(简称“隐藏方法”);

3.基类是抽象类,抽象类中使用abstract关键字进行限定的方法(简称“抽象方法”)。


(2)virtual关键字详解

virtual关键字用于定义虚方法,基类中的virtual方法可以被直接或间接派生类选择性重写。


(3)new关键字详解

new关键字用于隐藏方法,这里的隐藏是派生类对基类隐藏同名方法,直观的区别就在于声明为基类而实例化为派生类的对象将无法调用派生类的隐藏方法,但是声明与实例化均为派生类的对象则可以调用派生类的隐藏方法。


(4)abstract关键字详解

abstract关键字用于声明抽象类和抽象方法,且抽象方法仅存在于抽象类中,直接派生类被要求必须完成基类中抽象方法的定义,除非直接派生类也为抽象类。


(5)seald关键字详解

seald关键字用于声明密封类和密封方法,密封类无法被继承,密封方法无法被重写。

readonly关键字 

readonly关键字通常用于字段和结构体。

(1)readonly修饰的字段只能在声明时或其所在类的构造函数中进行初始化,readonly修饰的结构体中所有字段都是隐式地被readonly限定;

(2)readonly修饰的字段可能是值类型也可能是引用类型,若为值类型,那么则为不可变对象,若为引用类型,则只能保证当前字段所指向的实例不变,但无法保证实例内部的状态不变,且官方不建议使用readonly修饰可变引用类型的字段,特别是对于向外公开的可变引用类型,因为这可能存在安全漏洞。

static关键字 

static关键字可用于修饰类、字段、属性、方法、运算符、事件和构造函数。

(1)static修饰类:静态类的字段、属性和其它成员必须都是静态的。

(2)static修饰字段:外部访问范围将不限于某个实例对象而是整个类,通常以"类名.字段名"的方式进行访问,在类的内部将作为所有实例对象的共享字段。

(3)static修饰属性:与static字段相似,不同的是属性可以控制get和set权限。

(4)static修饰方法:外部访问范围将不限于某个实例对象而是整个类,通常以"类名.方法名"的方式进行访问,在类的内部将作为所有实例对象的共享方法。

(5)static构造函数:对于接口、类和静态类都具有静态构造函数。

索引器 

索引器与属性类似,只不过属性通常针对字段,而索引器针对整个类或结构体。通过索引器可以自定义类似于数组下标访问、字典键值访问的规则,尤其是对于一些自定义的数据结构,创建索引器可以使得访问和修改更加便捷。属性的各种用法均适用于索引器,除了"自动实现属性"的用法,索引器可以指定多个参数。

运算符重载 

运算符重载与函数重载类似,通过对某个类或结构体的可重载运算符进行重载,使得该类或结构体的实例在运算符表达式中按照重载的逻辑进行操作,运算符重载与函数重载一样具备编译时自动匹配的特性。值得注意的是运算符重载需要明确可重载运算符以及成对重载的运算符,运算符重载的参数至少有一个类型包含当前类。

如果这篇文章对你有帮助,请给作者点个赞吧!  

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

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

相关文章

Goose:Golang中的数据库迁移工具

Goose:Golang中的数据库迁移工具 在Golang开发中,数据库迁移是一个常见的任务,用于管理数据库模式的演化和版本控制。Goose是一个轻量级的、易于使用的数据库迁移工具,专为Golang开发者设计。本文将介绍Goose的基本概念、用法和优…

智能驾驶规划控制理论学习01-自动驾驶系统介绍、规划控制模块介绍

目录 一、自动驾驶系统概述 二、规划控制模块介绍 1、规划控制架构 2、规划控制目标 3、Cartesian和Frenet坐标系 4、Frenet坐标系概览 5、解耦式规划和联合式规划 一、自动驾驶系统概述 目前被国内外广为接受的自动驾驶级别划分标准是 SAE&#xff…

Nano 33 BLE Sense Rev2学习第二节——手机蓝牙接收数据

Nano 33 BLE Sense Rev2需要下载的程序 #include <ArduinoBLE.h> #include "Arduino_BMI270_BMM150.h"float x, y, z; int degreesX 0; int degreesY 0;BLEService ledService("19B10010-E8F2-537E-4F6C-D104768A1214"); // create service// cre…

2024年两会-区块链方向-新质生产力-先进制造业集群

区块链寒冬还未散去&#xff0c;但区块链引发的信任革命&#xff0c;对生产关系的变革&#xff0c;对数字金融产生的广泛影响&#xff0c;对货币金融体系的完全重构&#xff0c;对数据融合和隐私安全带来的巨大冲击才刚刚开始&#xff0c;没有不好的技术&#xff0c;只有不好的…

XSS漏洞--概念、类型、实战--分析与详解[结合靶场pikachu]

目录 一、XSS概念简述 1、XSS简介&#xff1a; 2、XSS基本原理&#xff1a; 3、XSS攻击流程&#xff1a; 4、XSS漏洞危害&#xff1a; 二、XSS类型&#xff1a; 1、反射型XSS&#xff1a; 2、存储型XSS&#xff1a; 3、DOM型XSS&#xff1a; 三、靶场漏洞复现(pikach…

LVS四层负载均衡集群

简介 LVS&#xff08;Linux Virtual Server&#xff09;即Linux虚拟服务器&#xff0c;是由章文嵩博士主导的开源负载均衡项目&#xff0c;目前LVS已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案&#xff0c;终端互联网用户从外部访…

基于 Guava 的 RateLimiter 实现预热功能

基于 Guava 的 RateLimiter 实现预热功能 Guava 的 RateLimiter 类提供了一种限流的机制&#xff0c;它可以控制在给定的时间间隔内允许的操作速率。虽然 Guava 的 RateLimiter 类本身并没有提供预热模型的功能&#xff0c;但是你可以通过自定义的方式实现一个简单的预热模型。…

html地铁跑酷

下面是一个简单的HTML代码来展示一个地铁跑酷游戏&#xff1a; <!DOCTYPE html> <html> <head><title>地铁跑酷</title><style>#player {position: absolute;top: 0;left: 0;width: 50px;height: 50px;background-color: red;}</style…

C语言 通讯录项目动态版本 容量可增加

项目在clion通过简单测试 代码在三个文件里写成 ①main.c 项目大框架 #include"game.h"//显示菜单 void Menu(){printf("****1.添加用户 2.删除用户****\n");printf("****3.查找用户 4.修改用户****\n");printf("****5.显示用户 6.…

diffusion model (扩散模型)原理

扩散模型分为正向过程和反向过程。 正向过程为一点点在图片上添加噪声的过程&#xff0c;反向过程为去噪声的过程。 图片的生成就是反向过程&#xff0c;给一张高斯噪声图片&#xff0c;逐步去噪生成图片。 扩散模型和VAE的区别&#xff0c; VAE是一步到位的&#xff08;通过…

一个基于差异同步数据库结构的工具 - Skeema

本文是 GO 三方库推荐的第 5 篇&#xff0c;继续介绍数据库 schema 同步工具&#xff0c;我前面已经写了两篇这个主题的文章。系列查看&#xff1a;Golang 三方库。 今天&#xff0c;推荐是的一个基于差异实现数据库 schema 迁移的工具库 - skeema&#xff0c;同样由 Go 实现。…

数字孪生10个技术栈:数据采集的八种方式

大家好&#xff0c;我是贝格前端工场&#xff0c;上期讲了数字孪生10个技术栈&#xff08;总括&#xff09;:概念扫盲和总体介绍&#xff0c;获得了大家的热捧&#xff0c;本期继续分享技术栈&#xff0c;大家如有数字孪生或者数据可视化的需求&#xff0c;可以联络我们。 一、…

迁移数据库

如果您需要快速迁移数据库到另一台服务器上&#xff0c;并且考虑到大型数据库的情况&#xff0c;以下是一些建议&#xff1a; 使用 mysqldump 导出并通过管道传输&#xff1a; 在导出时通过管道直接传输数据到新服务器&#xff0c;可以避免在中间产生大型的备份文件。这可以通过…

【好书推荐-第九期】Sora核心技术相关书籍《扩散模型:从原理到实战》与《GPT 图解:大模型是怎样构建的》:Sora的两大核心技术,都藏在这两本书里!

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公众号&#xff1a;洲与AI。 &#x1f388; 本文专栏&#xff1a;本文收录…

微信小程序开发常用的布局

在微信小程序开发中&#xff0c;常用的布局主要包括以下几种&#xff1a; Flex 布局&#xff1a;Flex 布局是一种弹性盒子布局&#xff0c;通过设置容器的属性来实现灵活的布局方式。它可以在水平或垂直方向上对子元素进行对齐、排列和分布。Flex 布局非常适用于创建响应式布局…

图片切换特效

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>05 图片切换</title><style type"text/css">*{padding: 0;margin: 0;}#box{border: 1px solid #ccc;width: 430px;height: 70px…

进程间通信---管道题目练习

实现AB进程对话。 A进程发送一句话后&#xff0c;B进程接收到打印。然后B进程发送一句话&#xff0c;A进程接收后打印 重复上述步骤。直到AB接收或者发送完quit后&#xff0c;结束AB进程 A进程 #include <stdio.h> #include <sys/types.h> #include <sys/stat.…

解决DBeaver执行脚本报错No active connection

解决DBeaver执行脚本报错No active connection 1、报错问腿 2、问题解决 2.1、右键点击该数据库&#xff0c;选择SQL编辑器&#xff0c;选择新建SQL编辑器&#xff0c;然后将sql语句复制过去。 或者左击选中数据库后直接使用快捷键 Ctrl] 2.2、在Project-General中找到Scr…

k8s运维问题整理

1.宕机或异常重启导致etcd启动失败 服务器非正常关机&#xff08;意外掉电、强制拔电&#xff09;后 etcd 数据损坏。 查看apiserver日志发现出现报错Error while dialing dial tcp 127.0.0.1:2379: connect: connection refused&#xff0c;2379是etcd的端口&#xff0c;那么a…

mybatis 数据库缓存的原理

MyBatis 是一个流行的 Java 持久层框架&#xff0c;它封装了 JDBC&#xff0c;使数据库交互变得更简单、直观。MyBatis 支持两级缓存&#xff1a;一级缓存&#xff08;Local Cache&#xff09;和二级缓存&#xff08;Global Cache&#xff09;&#xff0c;通过这两级缓存可以有…