c# 中如何声明一个静态常量?
publicstaticconststringSUCCESS="1";这样写什么不行啊?我就是在类里面写的classProgram{publicstaticconstst...
public static const string SUCCESS = "1";
这样写什么不行啊?
我就是在类里面写的
class Program
{
public static const string SUCCESS = "1";
.........
报这个错误
错误 1 常量“ConsoleApplication1.Program.SUCCESS”不能标记为 static D:\My Documents\Visual Studio 2005\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs 12 36 ConsoleApplication1 展开
这样写什么不行啊?
我就是在类里面写的
class Program
{
public static const string SUCCESS = "1";
.........
报这个错误
错误 1 常量“ConsoleApplication1.Program.SUCCESS”不能标记为 static D:\My Documents\Visual Studio 2005\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs 12 36 ConsoleApplication1 展开
5个回答
展开全部
C#拥有两种不同的常量:静态常量(compile-time constants)和动态常量(runtime constants)。它们有不同的特性,错误的使用不仅会损失效率,还可能造成错误。相比之下,静态常量在速度上会稍稍快一些,但是灵活性却比动态常量差很多。
//静态常量(隐式是静态的)
public const int compiletimeConstant = 1;
//动态常量
public static readonly runtimeConstant = 1;
静态常量在编译时会将其替换为所对应的值,也就是说下面这2句话通过编译器编译后产生的IL是一样的。
//通过编译后二者会被翻译成相同的中间语言
int myNum = compiletimeConstant;
int myNum = 1;
动态常量的值是在运行时获得的。IL中将其标为只读常量,而不是用常量的值代替。
静态常量只能被声明为简单的数据类型(内建的int和浮点型)、枚举或字符串。下面的程序段是通不过编译的。你不能用new关键字初始化一个静态常量,即便是对一个值类型来说。
//这样是错误的
public const DateTime myDateTime = new DateTime(2006,9,1,0,0,0);
//这样是可以的
public static readonly DateTime myDateTime = new DateTime(2006,9,1,0,0,0);
只读数据也是常量的一种,它们不能在构造器初始化之后被修改。但是它同静态常量不同,它的值是在运行时才被指派的,因此就会获得更大的灵活性。动态常量可以是任意的数据类型。
二者最大的差别在于:静态常量在编译时会将其换为对应的值,这就意味着对于不同的程序集来说,当你改变静态常量的时候需要将其重新编译,否则常量的值不会发生变化,可能引发潜在的问题,而动态常量就不会有这种情况。
用const定义的常量(隐式是静态的),需要像访问静态成员那样去访问const定义的常量,而用对象的成员方式去访问会出编译错误。 声明的同时要设置常量值。
从另一方面来说,如果你的确要声明一些从不改变且处处唯一的常量,例如钩子函数SetWindowsHookEx的idHook参数或序列化时的版本等,就应该使用静态常量。但是用到这样的常量的机会不多。一般来说我们应该使用灵活性更高的动态常量。
静态常量 动态常量
内存消耗 无 因为要保存常量 有消耗
初始化 很少的简单类型, 任意类型,可以在类构造函数中赋值
不能new,必须在
声明同时赋值
何时发挥作用 编译时进行替换 相当于类中的数据成员
//静态常量(隐式是静态的)
public const int compiletimeConstant = 1;
//动态常量
public static readonly runtimeConstant = 1;
静态常量在编译时会将其替换为所对应的值,也就是说下面这2句话通过编译器编译后产生的IL是一样的。
//通过编译后二者会被翻译成相同的中间语言
int myNum = compiletimeConstant;
int myNum = 1;
动态常量的值是在运行时获得的。IL中将其标为只读常量,而不是用常量的值代替。
静态常量只能被声明为简单的数据类型(内建的int和浮点型)、枚举或字符串。下面的程序段是通不过编译的。你不能用new关键字初始化一个静态常量,即便是对一个值类型来说。
//这样是错误的
public const DateTime myDateTime = new DateTime(2006,9,1,0,0,0);
//这样是可以的
public static readonly DateTime myDateTime = new DateTime(2006,9,1,0,0,0);
只读数据也是常量的一种,它们不能在构造器初始化之后被修改。但是它同静态常量不同,它的值是在运行时才被指派的,因此就会获得更大的灵活性。动态常量可以是任意的数据类型。
二者最大的差别在于:静态常量在编译时会将其换为对应的值,这就意味着对于不同的程序集来说,当你改变静态常量的时候需要将其重新编译,否则常量的值不会发生变化,可能引发潜在的问题,而动态常量就不会有这种情况。
用const定义的常量(隐式是静态的),需要像访问静态成员那样去访问const定义的常量,而用对象的成员方式去访问会出编译错误。 声明的同时要设置常量值。
从另一方面来说,如果你的确要声明一些从不改变且处处唯一的常量,例如钩子函数SetWindowsHookEx的idHook参数或序列化时的版本等,就应该使用静态常量。但是用到这样的常量的机会不多。一般来说我们应该使用灵活性更高的动态常量。
静态常量 动态常量
内存消耗 无 因为要保存常量 有消耗
初始化 很少的简单类型, 任意类型,可以在类构造函数中赋值
不能new,必须在
声明同时赋值
何时发挥作用 编译时进行替换 相当于类中的数据成员
2015-08-01 · 知道合伙人软件行家
Axure夜话
知道合伙人软件行家
向TA提问 私信TA
知道合伙人软件行家
采纳数:1197
获赞数:1344
1992年毕业于太原理工大学,20年IT公司工作经验现任山西誉海和科技有限公司技术总监,老二牛车教育课程总监
向TA提问 私信TA
关注
展开全部
在C#中定义常量的方式有两种:
1:使用关键词const
public const int TEST_VALUE = 10;
2:使用关键词readonly
public readonly int TEST_VALUE = 10;
静态常量 就是按照第一种方式定义的
注意:不能添加关键词static
public static const int TEST_VALUE = 10; (错误的)
const 可以理解为常量:常量就是一个其值永远不会改变的静态字段。常量的值会在编译时自动推算,编译器会在遇到常量时,将其逐个替换为该常量的值
readonly 可以理解为静态只读常量:静态只读常量只是在某一个应用程序中初始化之后,不能对其进行修改。但是在不同的应用程序中可以有不同的值
1:使用关键词const
public const int TEST_VALUE = 10;
2:使用关键词readonly
public readonly int TEST_VALUE = 10;
静态常量 就是按照第一种方式定义的
注意:不能添加关键词static
public static const int TEST_VALUE = 10; (错误的)
const 可以理解为常量:常量就是一个其值永远不会改变的静态字段。常量的值会在编译时自动推算,编译器会在遇到常量时,将其逐个替换为该常量的值
readonly 可以理解为静态只读常量:静态只读常量只是在某一个应用程序中初始化之后,不能对其进行修改。但是在不同的应用程序中可以有不同的值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
常量隐含着就是静态的,所以,不用特别说明 static.
代码改为这样:
class Program
{
public const string SUCCESS = "1";
.........
代码改为这样:
class Program
{
public const string SUCCESS = "1";
.........
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
const就是静态常量
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你申明的这个静态变量在哪申明的?必须在类里!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询