C# 中const,readonly,static的使用小结

下面是对于“C#中const,readonly,static的使用小结”的详细讲解。

前言

在C#开发中,我们常常会使用const,readonly和static这三个关键字,它们都可以用来定义变量,但具有不同的作用。

const

const是常量的意思,其特点是在编译时期已经固定下来了,不可改变。

在C#中,const定义的变量必须在声明时初始化,而且只能通过常量表达式来初始化,不能在运行时改变它的值。

常量表达式可以是任意表达式,编译器在编译时就会计算出它的值,因此,const定义的常量可以被看成是编译期间的字面常量。

下面是一个示例:

class Program
{
    static void Main(string[] args)
    {
        const int a = 1;
        //a=2;//编译时会出错,因为const不能修改
        Console.WriteLine("a=" + a);
    }
}

readonly

和const不同的是,readonly定义的变量可以延迟初始化,因此它的初始化可以在构造函数中完成,也可以通过对象初始化器来完成。

另外,和const不同的是,readonly的变量是在运行时确定其值的。

因为readonly变量的值是在运行时确定的,所以可以使用只有运行时才能确定的表达式来初始化它,例如可以使用构造函数中的参数来初始化,还可以根据环境的不同,确定不同的初始化值。

以下是一个示例:

class Program
{
    readonly int a;
    Program()
    {
        a = 1;//通过构造函数初始化变量a
        Console.WriteLine("a=" + a);
    }
    void Test()
    {
        const int b = a;//常量表达式可以使用运行时变量
        Console.WriteLine("b=" + b);
    }
    static void Main(string[] args)
    {
        Program p = new Program();
        p.Test();
    }
}

static

静态变量(static)是指在类中定义的,所有实例共享的变量。

静态变量的生命周期要比实例变量长,它会在整个程序的生命周期内存在,因此,我们可以在任何地方通过类名来访问静态变量,而不需要创建对象。

静态变量的特点是,它可以被多个实例共享,并且在任何实例中对静态变量的修改都会影响所有的实例。

下面是一个示例:

class Program
{
    static int a = 1;//静态变量
    static void Test()
    {
        Console.WriteLine("a=" + a);//直接访问静态变量
    }
    static void Main(string[] args)
    {
        Test();//输出1
        a = 2;//修改静态变量
        Test();//输出2
        Console.ReadKey();
    }
}

总结

以上是C#中const,readonly和static的使用小结。要点如下:

  • const用于定义编译时期的常量,值不可修改。
  • readonly用于定义运行时期的常量,值可以在构造函数中初始化。
  • static用于定义静态变量,被多个实例共享,值可以在任何地方修改。

希望上述内容能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 中const,readonly,static的使用小结 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • C# 实现Eval(字符串表达式)的三种方法

    当我们需要在C#程序中通过字符串表达式来实现动态计算的时候,可以采用以下三种方法: 方法一:使用DataTable的Compute方法 首先需要引用System.Data,然后可以使用DataTable的Compute方法来计算字符串表达式的值。 示例代码: using System; using System.Data; namespace EvalDem…

    C# 2023年6月6日
    00
  • C#算法函数:获取一个字符串中的最大长度的数字

    获取一个字符串中的最大长度的数字,可以通过以下算法函数来实现: 函数定义 public static int GetMaxNumberLength(string str) { string[] words = str.Split(new char[] { ‘ ‘, ‘,’, ‘.’, ‘?’, ‘!’ }, StringSplitOptions.Remove…

    C# 2023年6月8日
    00
  • ASP.NET Core2读写InfluxDB时序数据库的方法教程

    ASP.NET Core2读写InfluxDB时序数据库的方法教程 InfluxDB是一个开源的时序数据库,它专门用于存储和查询时间序列数据。在本攻略中,我们将详细讲解如何在ASP.NET Core2应用程序中读写InfluxDB时序数据库。 步骤一:安装InfluxDB 在开始之前,您需要安装InfluxDB。您可以从InfluxDB官网下载并安装最新版本…

    C# 2023年5月17日
    00
  • 总结十条.NET异常处理建议

    下面我将对如何总结十条.NET异常处理建议进行详细讲解。在.NET应用程序中,正确处理异常异常是保证应用程序稳定性和可靠性的关键,可以避免应用程序出现崩溃和数据丢失等问题。因此,我们需要总结出一些通用的.NET异常处理建议。 1. 记录异常日志 在捕捉异常后,我们需要记录异常日志来帮助我们更快地找到问题。记录异常日志的方式有很多,例如使用log4net和NL…

    C# 2023年5月15日
    00
  • C# TreeView控件使用技巧汇总

    C# TreeView控件使用技巧汇总 前言 TreeView是Winform中常用的控件之一,它可以展示出树形结构。使用TreeView可以突出展示系统的分类信息和层级结构。但是,即便是一些经验丰富的Winform程序员也会遇到使用目录树控件(TreeView)时的一些问题,如如何向一个TreeView控件中添加节点、如何实现选中节点、如何扩展和收缩节点等…

    C# 2023年5月31日
    00
  • C#正则表达式匹配与替换字符串功能示例

    C#正则表达式匹配与替换字符串功能示例 什么是正则表达式? 正则表达式是一种强大的文本匹配工具,它可以用来匹配、搜索和替换文本中符合特定模式的字符串。在C#中,可以使用System.Text.RegularExpressions命名空间下的正则表达式类来操作正则表达式。 正则表达式语法 以下是常用的正则表达式语法: 语法 说明 . 匹配任意单个字符 \d 匹…

    C# 2023年6月7日
    00
  • python简单线程和协程学习心得(分享)

    Python简单线程和协程学习心得 线程和协程的区别 线程是操作系统的调度单位,是由操作系统来进行线程调度,每个线程拥有自己的内存空间,一个线程会包含多个任务的处理过程,可以实现同时执行多个任务的效果。 而协程则是在用户程序中自行切换的,每个协程之间并不存在系统线程之间的上下文切换开销,协程是一种轻量级的线程,可以在同一个线程中运行,不会让操作系统进行线程上…

    C# 2023年6月6日
    00
  • ASP.Net Core对USB摄像头进行截图

    以下是“ASP.NetCore对USB摄像头进行截图”的完整攻略: 什么是ASP.NetCore ASP.NetCore是一个跨平台的Web应用程序框架,它可以在Windows、Linux和macOS等操作系统上运行。ASP.NetCore是.NET Core的一部分,它提供了一现代化的Web开发模型,可以轻松地构建高性能、可展和安全的Web应用程序。 如何…

    C# 2023年5月12日
    00
合作推广
合作推广
分享本页
返回顶部