我有一个常量int变量定义为类变量:
我的课程定义如下:
public class ABC : XYZ { private const int constantNumber = 600; public ABC(): base(constantNumber) {} }
它在调用基础构造函数时(即在调用它自己的构造函数之前)是否可用?
什么时候定义?
解决方法
即使没有初始化课程,它也可用!基本上,在使用常量的任何地方,编译器都会内联该值.
例如:
public class Constants { public const int Foo = 10; static Constants() { Console.WriteLine("Constants is being initialized"); } } class Program { static void Main() { // This won't provoke "Constants is being initialized" Console.WriteLine(Constants.Foo); // The IL will be exactly equivalent to: // Console.WriteLine(10); } }
即使使用静态只读变量,您仍然可以在当前使用它的地方使用它 – 因为它与类型相关而不是类型的实例.不要忘记const是隐式静态的(你不能明确说明).
作为旁注(在评论中提到),这种“嵌入”意味着你应该只将const用于真正常量的东西.如果上面的常量和程序在不同的程序集中,并且Constant.Foo被更改为具有值20,则在更改可用之前需要重新编译程序.静态只读字段不是这种情况,其值在执行时检索,而不是在编译时嵌入.
(这也会影响可选参数的默认值.)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。