C# 探险之旅:第三十三节 - 类型class(静态成员和静态类Static Members 和 Static Classes):一场不“动”声色的冒险

嘿,勇敢的探险家们!欢迎再次踏上C#的神秘之旅。今天,我们要探索的是一个神秘而又特别的领域——静态成员和静态类。想象一下,这是一群“懒得动”的家伙,他们不喜欢随着对象的创建而四处奔波,更喜欢安安静静地待在一个地方,守护着整个类的共同财富。

静态成员:共享的宝藏

首先,让我们来聊聊静态成员。在一个类中,有些成员(比如方法、字段、属性等)被标记为static,这意味着它们是“懒羊羊”——不喜欢动,不会随着每个对象的创建而生成新的副本。它们属于整个类,而不是某个具体的对象。

静态成员是类的一部分,但它们不属于任何特定的对象实例。这意味着,无论你创建多少个该类的对象,静态成员始终只有一个副本,所有对象共享这个副本。你可以把静态成员看作是家庭中的公共设施,比如那个大冰箱或客厅里的电视。

定义静态成员

要在C#中定义静态成员,只需在成员前加上static关键字。例如:

public class Family
{
    // 静态字段:每个家庭成员都可以访问
    public static string SharedMessage = "欢迎来到我们的家!";

    // 静态方法:不依赖于任何特定的家庭成员
    public static void SayHello()
    {
        Console.WriteLine(SharedMessage);
    }
}

在这个例子中,SharedMessage是一个静态字段,所有Family类的实例都可以访问它。SayHello是一个静态方法,它可以被调用而无需创建Family类的实例。

使用静态成员

使用静态成员时,不需要创建类的实例。你可以直接通过类名来访问它们,就像你直接去冰箱拿东西一样方便。

// 直接通过类名访问静态成员
Console.WriteLine(Family.SharedMessage); // 输出: 欢迎来到我们的家!

// 调用静态方法
Family.SayHello(); // 输出: 欢迎来到我们的家!

静态类:家族的守护者

静态类是一种特殊的类,它只能包含静态成员,并且不能被实例化。也就是说,你不能创建静态类的对象。静态类通常用于提供工具方法或常量,因为它们不需要维护状态。你可以把静态类看作是家族中的守护者,负责管理公共资源,确保一切都井然有序。

定义静态类

要定义一个静态类,只需在class关键字前加上static。静态类的所有成员也必须是静态的。

//使用 static 关键字创建一个静态类
public static class Utility
{
    // 静态字段
    private static int counter = 0;

    // 静态方法
    public static void IncrementCounter()
    {
        counter++;
        Console.WriteLine($"计数器现在是: {counter}");
    }

    // 静态只读属性
    public static int Counter
    {
        get { return counter; }
    }
}

 在这个例子中,Utility是一个静态类,它包含了一个计数器和一些操作计数器的方法。由于Utility是静态的,你无法创建它的实例,但可以直接通过类名访问它的成员。

使用静态类

使用静态类也非常简单,因为你不需要创建实例。你可以直接通过类名来调用静态方法和访问静态成员。

Utility.IncrementCounter(); // 输出: 计数器现在是: 1
Utility.IncrementCounter(); // 输出: 计数器现在是: 2

// 访问静态属性
Console.WriteLine($"当前计数器值: {Utility.Counter}"); // 输出: 当前计数器值: 2

小结:成为代码家族的守护者

通过今天的学习,你已经掌握了如何使用静态成员和静态类来让你的代码更加高效和简洁。静态成员就像是家庭中的公共设施,所有成员都可以共享;而静态类则像是家族的守护者,负责管理和提供公共资源。

静态成员和静态类不仅使代码更易于维护,还能提高性能,因为它们不需要为每个对象创建单独的副本。此外,静态类还可以帮助你组织代码,将相关的工具方法和常量集中在一个地方。

所以,下次当你坐在键盘前,准备编写一些代码时,不妨想想自己是一位家族的守护者,正在精心设计一个共享资源系统,确保每个成员都能方便地使用这些资源。记住,静态成员和静态类就是你手中的魔法钥匙,让你的代码更加整洁和强大

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

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

相关文章

国威HB1910数字程控电话交换机 generate.php 未授权RCE漏洞复现

0x01 产品简介 国威HB1910数字程控电话交换机是一款功能强大的通信设备,国威HB1910数字程控电话交换机符合国家工信部YD 344-1990《自动用户交换机进网要求》规范,以及其他多项国家安全标准规范,如YD/T 1141-2007、YD/T 729-1994、YD/T 751-1995等。同时,设备还具备自动检…

信奥赛CSP-J复赛集训(bfs专题)(5):洛谷P3395:路障

信奥赛CSP-J复赛集训(bfs专题-刷题题单及题解)(5):洛谷P3395:路障 题目描述 B 君站在一个 n n n\times n n

CTF-WEB: php-Session 文件利用 [第一届国城杯 n0ob_un4er 赛后学习笔记]

step 1 搭建容器 教程 A5rZ 题目 github.com Dockerfile 有点问题,手动修复一下 FROM php:7.2-apacheCOPY ./flag /root COPY ./readflag / COPY ./html/ /var/www/html/ COPY ./php.ini /usr/local/etc/php/php.ini COPY ./readflag /readsecretRUN chmod 755 /var/www…

【经验分享】搭建本地训练环境知识点及方法

最近忙于备考没关注,有次点进某小黄鱼发现首页出现了我的笔记还被人收费了 虽然我也卖了一些资源,但我以交流、交换为主,笔记都是免费给别人看的 由于当时刚刚接触写的并不成熟,为了避免更多人花没必要的钱,所以决定公…

FastJson反序列化学习-01

&#x1f338; FastJson FastJson是一个由阿里巴巴开发的高性能JSON处理库&#xff0c;支持Java对象与JSON字符串之间的互相转换。 本次漏洞研究基于FastJson的1.2.24版本。也就是最早出现FastJson反序列化漏洞的版本。 CVE-2017-18349&#xff0c;FastJson<1.2.24 &…

【恶意软件检测论文】通过提取 API 语义来实现的一个新颖的安卓恶意软件检测方法

目录 摘要1. 引言2. 相关工作2.1. 基于重新训练的恶意软件检测2.2. 基于应用关系图的恶意软件检测2.3. 基于异常样本识别的恶意软件检测2.4. 基于API聚类的恶意软件检测 3. AMDASE概述4. 基于语义距离的API聚类4.1. API特征提取4.2. API句子生成4.3. API句子编码4.4.聚类中心生…

【iOS】OC高级编程 iOS多线程与内存管理阅读笔记——自动引用计数(四)

目录 ARC规则 规则 对象型变量不能作为C语言结构体的成员 显式转换id和void* 属性 数组 ARC规则 规则 在ARC有效的情况下编译源代码必须遵守一定的规则&#xff1a; 主要解释一下最后两条 对象型变量不能作为C语言结构体的成员 要把对象型变量加入到结构体成员中时&a…

location重定向和nginx代理

文章目录 1 location重定向1.1 概述1.2 rewrite跳转1.3 用例1.4 实验1.4.1 基于域名的跳转1.4.2 基于ip的跳转1.4.3 基于后缀名的跳转 2 nginx的代理2.1 nginx内置变量2.2 正向代理2.2.1 固定正向代理2.2.2 自动代理 2.3 反向代理2.3.1 负载均衡的算法2.3.2 负载均衡的特点2.3.…

【Qt】qt基础

目录 一、使用Qt Creator创建qt项目 二、项目文件解析 三、Qt中创建图形化界面的程序的两种方法 四、对象树 五、Qt中处理打印乱码问题的利器&#xff1a;qDebug() 一、使用Qt Creator创建qt项目 1.选择项目模板 选中第一类模板Application(Qt应用程序&#xff0c;包含普…

CSS在线格式化 - 加菲工具

CSS在线格式化 打开网站 加菲工具 选择“CSS在线格式化” 或者直接访问 https://www.orcc.online/tools/css 输入CSS代码&#xff0c;点击左上角的“格式化”按钮 得到格式化后的结果

java之集合(详细-Map,Set,List)

1集合体系概述 1.1集合的概念 集合是一种容器&#xff0c;用来装数据的&#xff0c;类似于数组&#xff0c;但集合的大小可变&#xff0c;开发中也非常常用。 1.2集合分类 集合分为单列集合和多列集合 Collection代表单列集合&#xff0c;每个元素&#xff08;数据&#xff…

C语言刷题

1. 题目描述 根据给出的三角形3条边a:b.c(a.b,c<100.000)&#xff0c;计算三角形的周长和面积。 输入描述: 一行&#xff0c;三角形3条边(能构成三角形)&#xff0c;中间用一个空格隔开. 输出描述: 一行&#xff0c;三角形周长和面积保留两位小数&#xff0c;中问用一个空…

自动驾驶控制与规划——Project 1: 车辆纵向控制

目录 零、任务介绍一、环境配置1.1 CARLA的配置1.2 Docker Ubuntu 20.04 ROS2 Foxy的配置 二、算法2.1 定速巡航2.2 自适应巡航2.3 离散PID控制 三、代码实现3.1 代码补全3.2仿真验证 零、任务介绍 课程主页 配置Carla仿真器配置carla-ros-bridge补全src\ros-bridge\carla_s…

Linux高并发服务器开发 第一天(Linux的目录结构 cd用法 终端提示符格式)

目录 1.命令解析器&#xff1a;shell 2.LINUX下的目录结构 3.cd的使用 3.1cd 绝对路径 3.2cd 相对路径 3.3cd 回车 3.4cd - 4. 终端提示符格式 1.命令解析器&#xff1a;shell 默认运行与计算机系统终端的 用来解析用户输入命令的工具 内核&#xff1a;操作系统的核…

[SAP ABAP] 序列化与反序列化

1.序列化 序列化表示将ABAP对象类型转成json字符串 我们可以使用方法/ui2/cl_json>serialize实现序列化&#xff0c;可以将ABAP中的内表结构转成json字符串类型 REPORT z437_test_2024.* 自定义数据类型 TYPES: BEGIN OF ty_makt,matnr LIKE makt-matnr, " 物料编号…

【h5py】 提取mat文件中的HDF5格式的数据

h5py 提取mat文件中的HDF5格式的数据 使用纯Python查看数据配合Matlab后&#xff0c;使用Python查看数据 一、使用纯Python查看文件数据内容 原理&#xff1a;当HDF5存储的是struct类型数据&#xff0c;解析时要像一棵树&#xff0c;我们需要逐层次的去解析&#xff0c;直到…

蓝桥杯刷题——day1

蓝桥杯刷题——day1 题目一题干题目解析代码 题目二题干题目解析代码 题目一 题干 给定一个字符串 s &#xff0c;验证 s 是否是 回文串 &#xff0c;只考虑字母和数字字符&#xff0c;可以忽略字母的大小写。本题中&#xff0c;将空字符串定义为有效的 回文串 。 题目链接&a…

el-table行合并及合并后序号处理

效果图 <el-tableclass"ncky-detail-table"v-loading"tableLoading"border:data"tableDataVo":span-method"objectSpanMethod"row-key"uniqueFlag":row-class-name"tablerowclassname"><el-table-column…

WordPress酱茄主题 开源版 博客资讯自媒体网站模板

一款免费开源的WordPress主题&#xff0c;主题专为WordPress博客、资讯、自媒体网站而设计 运行环境 支持WordPress版本&#xff1a;5.6 兼容Chrome、Firefox、Safari等主流浏览器 支持设备&#xff1a;响应式布局&#xff0c;不同设备不同展示效果 服务器环境建议&#x…

解析UnityEditor.TransformWorldPlacementJSON数据

Unity拷贝运行时数据的世界Trans信息可以得到json数据&#xff0c;稍微改装一下就可以得到对象数据了&#xff08;没找到官方对应的接口&#xff0c;如果有知道的可以评论区留言&#xff09;&#xff0c;如下图&#xff1a; 代码如下&#xff1a; [MenuItem("Assets/解析…