c#中static和const有什么区别?

 我来答
和屋昂黄
推荐于2019-08-08 · TA获得超过1.1万个赞
知道小有建树答主
回答量:54
采纳率:100%
帮助的人:8055
展开全部

static 是静态的修饰符,const是定义常量的修饰符;

const就是只读的意思,只在声明中使用;

static一般有2个作用,规定作用域和存储方式。对于局部变量,static规定其为静态存储方式,每次调用的初始值为上一次调用的值,调用结束后存储空间不释放;

对于全局变量,如果以文件划分作用域的话。此变量只在当前文件可见;

对于static函数也是在当前模块内函数可见。

static为静态修饰符,可以放在对象前面(函数也是一种对象)如:

class Example{public static void show(){Console.WriteLine("这是一个静态方法");}}

可直接Example.show();去调用这个方法而不用实例化

当然也可以定义静态的属性:

public static string str="hello";

但如果这样Example.str="helloworld";就出现问题了

也就是客户端可以在任何地方去改变str的值。这样的话极容易产生错误,因为str的值是依靠

Example类的,随时可以改变。比如再声明一个类:
Class Class1
{Example.str="helloworld";public void show(){Console.WriteLine(Example.str);//此时Example.str会输出helloworld}
}
class Example{
public static string str="hello";
}
}

要防止str值发生改变,就需要用到const修饰符

public const string str="hello";//str被称为常量

这是如果再对Example.str赋值,则编译器将产生错误

用常量来保存公共数据是最为合适的。

醉笑弃854
2018-02-02 · TA获得超过175万个赞
知道顶级答主
回答量:64.5万
采纳率:53%
帮助的人:3.4亿
展开全部
们都知道,const和static readonly的确很像:通过类名而不是对象名进行访问,在程序中只读等等。在多数情况下可以混用。
二者本质的区别在于,const的值是在编译期间确定的,因此只能在声明时通过常量表达式指定其值。而static readonly是在运行时计算出其值的,所以还可以通过静态构造函数来赋值。
明白了这个本质区别,我们就不难看出下面的语句中static readonly和const能否互换了:
1. static readonly MyClass myins = new MyClass();
2. static readonly MyClass myins = null;
3. static readonly A = B * 20;
static readonly B = 10;
4. static readonly int [] constIntArray = new int[] {1, 2, 3};
5. void SomeFunction()
{
const int a = 10;
...
}

1:不可以换成const。new操作符是需要执行构造函数的,所以无法在编译期间确定
2:可以换成const。我们也看到,Reference类型的常量(除了String)只能是Null。
3:可以换成const。我们可以在编译期间很明确的说,A等于200。
4:不可以换成const。道理和1是一样的,虽然看起来1,2,3的数组的确就是一个常量。
5:不可以换成readonly,readonly只能用来修饰类的field,不能修饰局部变量,也不能修饰property等其他类成员。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式