C# 中的静态关键字

embedded/2024/10/9 15:15:02/

C# 语言中的 static 关键字用于声明静态类和静态类成员。静态类和静态类成员(如构造函数、字段、属性、方法和事件)在只需要一个对象(类或类成员)副本并在类型(和成员)的所有实例(对象)之间共享时很有用。

让我们简化一下。假设您有一个类“CSharpSite”,它代表 C#Site网站、其属性及其功能。CSharpSite 类有四个属性,Founder、YearFounded、Location 和 Description。我们知道所有这些属性都是固定的,无论各种程序或类创建了多少个 CSharpCorner 类型的实例,它们都不会改变。这是一个静态类和静态属性的完美示例。

**注意:**您可以更改静态成员值,但最后更新的值将对调用静态成员的所有程序或调用者可用。

让我们看看一些简单例子的用法并尝试理解这些概念。

C# 中的静态变量

变量可以声明为静态。

案例分析

当我们不想创建一个变量的多个实例时,即我们想要在类的多个实例之间访问相同的值时,我们可以选择一个静态变量。

要访问静态变量,我们不需要创建类的对象。可以通过类名来访问。

注意: 如果我们在非静态方法中操作静态变量,那么每次创建对象时都会调用非静态方法,并且对静态变量的更改将在先前创建的每个对象之间共享。

我们来看一个例子。

执行 Add2Numbers() 方法后,静态变量的值已更新为 20。

现在我们再创建一个对象来调用 PrintStaticVariable() 方法。执行 PrintStaticVariable() 方法后,所有位置的值均已修改为 30。

C# 中的静态方法

案例分析

当我们有一个场景,只关注输出而不需要存储或检索某个类的特定实例所特有的数据时,我们可以选择静态方法。

要访问静态方法,我们也需要使用类名。不需要实例。

问:静态方法可以访问非静态字段吗?

答案是肯定的。静态方法可以直接访问静态字段,而无需使用类名。但是,要访问非静态字段,需要创建一个对象。上图显示了一个示例。

C# 中的静态类

案例分析

当我们将类中的所有成员函数和数据成员声明为静态时,我们应该将该类声明为静态。换句话说,我们可以说静态类不应包含任何非静态字段/方法。

我们来看一个例子。
https://www.c-sharpcorner.com/UploadFile/36bc15/static-keyword-in-C-Sharp/Images/read%20error.jpg

在上面的例子中,我们得到了一个编译时错误。提示说不能在静态类中声明实例成员。

问:如果在静态类中,我们没有非静态成员/函数,那么它是否拥有任何默认构造函数?

**答案是:**是的,它确实有一个构造函数,但它也被声明为静态的。

在上面的例子中,我们尝试创建一个实例构造函数,但在编译时出现错误。因此,我们将其声明为静态。

现在我们已经将构造函数声明为静态的,但是在编译时,我们再次遇到一个错误。


那么,让我们纠正这个错误。要纠正这个错误,我们必须删除公共访问修饰符。

问:静态构造函数可以有 public/private/internal/protected internal 访问修饰符吗?

答案是:,静态构造函数不包含任何访问修饰符。我们已经在前面的例子中看到了实现。

声明为静态的类/方法/字段的内存管理

当引用静态类的程序加载时,.NET Framework 公共语言运行时 (CLR) 会加载该类的信息类型。程序无法准确指定类的加载时间。但是,可以保证在程序中第一次引用该类之前加载该类,并初始化其字段并调用其静态构造函数。静态构造函数仅调用一次,并且静态类在程序所在的应用程序域的整个生存期内都保留在内存中。


http://www.ppmy.cn/embedded/51192.html

相关文章

如何用python调用C++处理图片

一. 背景 用pyhton可直接调用C,减少重写的工作量;部分逻辑运算,C的执行效率高,可进行加速。 下面就一个简单的C滤镜(彩色图转灰度图)为例,展示python调用C 二. 代码实现 代码结构如下&#x…

Kimichat使用案例018:一键总结网页内容(浏览器插件Kimi Copilot)

文章目录 一、介绍二、安装三、使用 一、介绍 在阅读网页的时候,如果需要总结网页内容要点,可以把链接丢进Kimichat,让它总结。但是,这样稍微有些麻烦。Chrome浏览器现在已经有一个非官方的Kimichat插件:Kimi Copilot…

什么是熵、熵增是什么?

目录 一、熵的定义1. 热力学中的熵2. 信息论中的熵 二、熵增三、生活中的熵增示例四、总结 一、熵的定义 1. 热力学中的熵 熵(entropy),在热力学中,熵是描述系统混乱程度或无序程度的物理量。它反映了系统在微观上可访问的状态数…

PHP题目

一.编写函数change($str)实现字符串转换功能&#xff0c;例如“str_replace”转换成“str%replace”、“arr_var”转换成“arr%var”。 <?php function change($str){$astr_replace(_,%,$str);return $a; } echo change(str_replace); ?> 运行结果&#xff1a; 二.通…

设备日志采集工具 1.1.0.2 发布

永久免费: Gitee下载 最新版本 使用说明: Moretl 企业级采集文件工具 主要更新内容 进一步提升工程师在设备上部署采集日志客户端效率. 浏览器打开根Url,自动跳转到部署页面.(之前工程师需要输入很长的部署页面Url);新增复制同类客户端同步任务功能.(同类设备采集同样的日志…

4.XSS-反射型(get)利用:获取cookie

GET反射型XSS利用&#xff1a;获取cookie 修改一下配置文件\pikachu\pkxss\xcookie\cookie.php 我这里将对应的IP地址修改为本地pikachu的主站IP地址&#xff0c;这样给用户造成一种正常视觉上的欺骗&#xff0c;容易上当。重定向到pikachu主页面 基于IP搭建的pkxss平台(入侵…

2021数学建模A题目–“FAST”主动反射面的形状调节

A 题——“FAST”主动反射面的形状调节 思路&#xff1a;该题主要是通过利用伸缩杆调整FAST反射面&#xff0c;给出合适的调整方案 程序获取 第一题问题思路与结果&#xff1a; 当待观测天体S位于基准球面正上方&#xff0c;结合考虑反射面板调节因素&#xff0c;确定理想抛物…

HBase 中设计 RowKey

HBase 中设计 RowKey 在 HBase 中设计 RowKey 是非常重要的&#xff0c;它直接影响着数据的存储和检索效率。下面是一些设计 RowKey 的原则&#xff1a; 1. 唯一性&#xff08;Uniqueness&#xff09;&#xff1a;RowKey 必须是唯一的&#xff0c;因为在 HBase 中&#xff0c;数…