浅谈C#中const、static readonly区别

const 编译时常量

static readonly 运行时常量

直接上代码

1.新建一个类库BLL->添加类Teacher

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace BLL
 8 {
 9    public  class Teacher
10     {
11         public static readonly int i = 3;
12         public static readonly string j = "static";
13
14         public const int m = 6;
15         public const string n = "const";
16     }
17 }

2.新建空Web应用程序->添加Webform

/*页面HTML*/

 1 <html xmlns="http://www.w3.org/1999/xhtml">
 2 <head runat="server">
 3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 4     <title></title>
 5 </head>
 6 <body>
 7     <form id="form1" runat="server">
 8     <div>
 9     <asp:TextBox ID="txti" runat="server"></asp:TextBox>
10     <asp:TextBox ID="txtj" runat="server"></asp:TextBox>
11     <asp:TextBox ID="txtm" runat="server"></asp:TextBox>
12     <asp:TextBox ID="txtn" runat="server"></asp:TextBox>
13     </div>
14     </form>
15 </body>
16 </html>

/*后台代码*/

 1 namespace WebApplication1
 2 {
 3     public partial class WebForm1 : System.Web.UI.Page
 4     {
 5         protected void Page_Load(object sender, EventArgs e)
 6         {
 7             Teacher t = new Teacher();
 8             this.txti.Text=Teacher.i.ToString();
 9             this.txtj.Text=Teacher.j.ToString();
10             this.txtm.Text = Teacher.m.ToString();
11             this.txtn.Text = Teacher.n.ToString();
12         }
13     }
14 }

3.在IIS发布访问后(页面显示)

4.修改Teacher类中常量值

namespace BLL
{
   public  class Teacher
    {
        public static readonly int i = 5;
        public static readonly string j = "static_modify";

        public const int m = 9;
        public const string n = "const_modify";
    }
}

5.生成解决方案,替换发布包中的BLL.dll后访问页面结果发现

static变量修改成功了,而const变量修改失败...

结论 :const 会将值便已在代码中,而static只是保留了引用

时间: 2024-08-03 19:30:53

浅谈C#中const、static readonly区别的相关文章

c#中const与readonly区别

const 的概念就是一个包含不能修改的值的变量.常数表达式是在编译时可被完全计算的表达式.因此不能从一个变量中提取的值来初始化常量.如果 const int a = b+1;b是一个变量,显然不能再编译时就计算出结果,所以常量是不可以用变量来初始化的. readonly 允许把一个字段设置成常量,但可以执行一些运算,可以确定它的初始值.因为 readonly 是在计算时执行的,当然它可以用某些变量初始化.readonly 是实例成员,所以不同的实例可以有不同的常量值,这使readonly更灵活

(转)c#中const与readonly区别

const 的概念就是一个包含不能修改的值的变量.常数表达式是在编译时可被完全计算的表达式.因此不能从一个变量中提取的值来初始化常量.如果 const int a = b+1;b是一个变量,显然不能再编译时就计算出结果,所以常量是不可以用变量来初始化的. readonly 允许把一个字段设置成常量,但可以执行一些运算,可以确定它的初始值.因为 readonly 是在计算时执行的,当然它可以用某些变量初始化.readonly 是实例成员,所以不同的实例可以有不同的常量值,这使readonly更灵活

C#中 const static readonly

readonly:运行时常量,程序运行时赋值,赋值后无法更改,一般称为只读变量 const:编译时常量,在编译时将该常量引用替换为字面量,一般只能赋值为数字,字符串,枚举类型 static:静态变量.静态方法.静态类 静态变量: 特点: 1.通过static关键字修饰,是属于类,实例成员属于对象,在这个类第一次加载的时候,这个类下面的所有静态成员会被加载. 2.static与非static最大的区别就是static类型的变量及方法在调用的时候就在内存中分配了地址,且这个地址只有一份,故stati

浅谈java中的static关键字

简述:在java中我们经常使用static关键字,该关键字就相当于是全局变量(静态变量或者是类变量). (1)当在类中的方法或者是变量前加上static时,那么这个方法或者变量只有'一份',在此后的类的各种对象中也是共用一份这个static所修饰的方法或者是变量(直接通过类名访问),相比于父类中其他的非static变量或者是方法,当其对象产生时,对象中会自己备份一份非static变量或者是方法(被所有的类实例共享).所以从这个角度看,static实际上可以节约内存空间,但是会一直占用内存空间,直

浅谈 Mybatis中的 ${ } 和 #{ }的区别

一.举例说明 1 select * from user where name = "dato"; 2 3 select * from user where name = #{name}; 4 5 select * from user where name = ${name}; 一般情况下,我们都不会注意到这里面有什么不一样的地方.因为这些sql都可以达到我们的目的,去查询名字叫dato的用户. 二.区别 动态 SQL 是 mybatis 的强大特性之一,也是它优于其他 ORM 框架的一

浅谈mybatis中的#和$的区别

1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id". 2. $将传入的数据直接显示生成在sql中.如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为ord

转 浅谈C++中指针和引用的区别

浅谈C++中指针和引用的区别 浅谈C++中指针和引用的区别 指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法. 1.指针和引用的定义和性质区别: (1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元:而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已.如: int a=1;int *p=&a; int a=1;int &b=a; 上面定义了一个整形变量和一个指针变量p,该指针变量指向a

浅谈C#中new、override、virtual关键字的区别

OO思想现在已经在软件开发项目中广泛应用,其中最重要的一个特性就是继承,最近偶简单的学习了下在设计模式中涉及到继承这个特性时,所需要用到的关键字,其中有一些关键点,特地整理出来. 一.New 在C#中,new这个关键字使用频率非常高,主要有3个功能: a)   作为运算符用来创建一个对象和调用构造函数. b)   作为修饰符. c)   用于在泛型声明中约束可能用作类型参数的参数的类型. 在本文中,只具体介绍new作为修饰符的作用,在用作修饰符时,new关键字可以在派生类中隐藏基类的方法,也就说

浅谈Java中set.map.List的区别

就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操作数目不固定的一组数据. 所有的JAVA集合都位于 java.util包中! JAVA集合只能存放引用类型的的数据,不能存放基本数据类型. JAVA集合主要分为三种类型: Set(集) List(列表) Map(映射) Collection 接口 :Collection是最基本的集合接口,声明了适用