平时在开发时经常会用到 const,readonly,static 关键字,可以肯定这些关键词是完全不同的概念,但有时候他们在用法上很相似以至于在场景中不知道选择哪一个,这篇文章我们就来讨论 C# 中的 const,static 和 readonly 关键词,放在一起比较一下看看如何选择。理解 constconst 常用来定义一个常量,什么意思呢?就是这个常量在你程序的生命周期内都不会被改变,因此,必须在声明常量时为其赋值,从技术角度上来说:这个常量值又被称...
注意:const编译期常量是编译的时候就确定的,可以查看IL代码,是写死的。如果另一个程序集引用后,该程序集没有进行编译,则值不会改变。
看效果:
项目中有2个程序集:其中:常量在这个程序集中定义并初始化。namespace ConstReadOnlyTest
{public class Class1{public const string a= "我是const常量.";public static string b = "我是static变量.";public readonly static string c = "我是readonly变量.";}
}另外,在另一个程...
我有一个类:class SomeTests {private Guid[] someGuids = new Guid[] { ... }public void ThoseGuidsShouldAlwaysBeThere() {foreach (Guid g in someGuids) { // error appears here// ...}}
}从语义上讲,我希望someGuids是const,因为除了重新编译代码之外,它们不应该被更新.但添加const关键字生成error CS0168:null在此上下文中无效.
阅读该错误的MSDN页面,在我看来,编译器认为我这样做:
foreach(Guid g in null){
我不明白如...
(1) readonly和const都是用来标示常量的。(2) 初始化赋值不同。const修饰的常量必须在声明的同时赋值。例如: 代码如下:public class Class1{ public const int MaxValue = 10; //正确声明 public const MInValue; //错误:常量字段要求提供一个值 public Class1() { MinValue = 10; }}readonly字段可以在初始化(声明或构造函数)的过程中赋值。因此,根据所使用的构造函数,reado...
namespace ConsoleApp1
{class Program{static void Main(string[] args){Console.WriteLine(Web.WebsiteURL);Web web = new Web();Console.WriteLine(web.version);}}class Web{// 常量public const string WebsiteURL = "http://www.baidu.com";// 只读字段public readonly string version = "1.0.0";}
}常量隶属于类,而不是对象,即没有"实例常量""实例常量"的角色由只读实例字段担当
各种只读的应用常见
为了提高程序可读性和执...
五、Unity C#编程
游戏运行模式程序首先初始化
然后进入一个while(true)循环 检查是否有消息(包括鼠标事件等)
若有消息 则处理后 然后计算 绘制场景
程序处在这么一个大循环中 不断检查是否有事件 若有则处理帧频
在while循环中 游戏会有一秒循环的次数 比如CPU可以一秒绘制80次画面
人对于画面的流畅感若到了60 其实已经非常流畅了
帧频若达到60 则可以不用继续提升了 若继续提升 其实也感觉不出来 而且会更加消耗CPU
因此 在绘制...
前言不知道大家对const和readonly这两个关键字的区别有什么了解,原来自己之前还真不清楚它们到底是怎么回事,那么如果你也不是很清楚的话,可以一起来探讨一下。在了解这两个关键字的时候我们先来了解一下静态常量和动态常量。静态常量:是指编译器在编译时候会对常量进行解析,并将常量的值替换成初始化的那个值。而动态常量的值则是在运行的那一刻才获得的,编译器编译期间将其标示为只读常量,而不用常量的值代替,这样动态常量...
【学习资料】《C#图解教程》(第6章):https://www.cnblogs.com/moonache/p/7687551.html 电子书下载:https://pan.baidu.com/s/1mhOmBG0
【内容】 const
readonly
static readonly
三者比较 【笔记】const编译时常量
类的常量
只能在声明时赋值readonly运行时常量
对象的常量
可以在 声明时 赋值(与常量一样),或 构造函数中 赋值static readonly运行时静态常量
类的常量
可以在 声明时 赋值(与常量一样),或 静态构造...
因此,我在非托管c语言中有一个函数,当某些文本碰巧到达时被调用:#using <MyParser.dll>
...
void dump_body(const unsigned char *Body, int BodyLen)
{// Need to pass the body to DumpBody, but as what type?...MyParser::Parser::DumpBody(???);
}DumpBody是在C#DLL中定义的静态函数,应采用一个类型的参数?
正文包含一个长度为BodyLen的字符(文本)数组.
显然这里需要进行一些编组工作,但我不知道该如何做.
请帮忙.解决方法...
我意识到,如果我具有“字节”类型的字段或变量,则可以对其应用按位NOT(?)并将其转换为字节.但是,如果该字段是“常量字节”,我仍然可以按位应用NOT(?),但不能将其强制转换为字节.例如,
这样编译:class Program
{byte b = 7;void Method(){byte bb = (byte) ~b;}
}但这有一个编译错误(“常量值’-8’不能转换为’byte’“):class Program
{const byte b = 7;void Method(){byte bb = (byte) ~b;}
}我想知道为什么?解决方法:因为?运...
我正在学习C语言的基础知识,来自.NET世界(C#).
我发现有趣的一个主题是const关键字及其与指针的使用(const指针/指向const的指针).
我想知道是否有任何C#语言等同于C指向const的const指针/指针?(我知道C#没有指针,我正在考虑引用C#中类似指针的类型).
另外,出于兴趣,如果没有这样的等价物,那么不包括这样一个特征的决定是什么?解决方法:没有直接等同于在C#中将引用作为“const”传递,但是有其他方法可以实现其目的.最常见的方法是...
在类中使用const或Func的任何优点或区别?public sealed class Constants {private Constants() {}public const string SOME_STRING = "Some String";public static Func<string> SomeString = () => "Some String";
}Debug.WriteLine(Constants.SOME_STRING);
Debug.WriteLine(Constants.SomeString());解决方法:对于你所展示的内容,使用const.你的意图很清楚.
Func只是一个函数,表示为一个对象.您似乎不需要功能,为什么要使用它?...
我正在尝试编写以下代码:public const Size ImageSize = new Size() { Width = 28, Height = 28 };但我得到宽度和高度是只读的错误.
建议的方法是什么?解决方法:const仅限于编译器可以直接写为IL的原语.如果将Size视为不可变的,那么readonly就足够了public static readonly Size ImageSize = new Size(28,28);请注意,如果Size是一个可变结构,可能会发生不好的事情;我会推荐一个属性而不是一个字段来防止一些令人困惑的副作用.
一段时间没有怎么用了,都快忘了。记录一下: 成员特性声明和修改简单作用readonly
实例成员
只初始化一次(不可以更改),且是在构造函数中
static
类成员,在加载类代码(实例化之前)时就已经赋予内存
建议在静态构造函数中初始化,可以多次修改
可作为一种“缓存”使用,但是会占用内存。const
类成员(默认带有static的相关特性)
声明时初始化,不可修改
关于static的跨进程,以后再看。
1. 这次看到static用在了ASP....
我的项目中有一个包含全局配置的类,如下所示:public class Config {public const bool LOGGING_ENABLED = false;
}我希望能够使用该成员编写预处理程序指令,如下所示:#if LOGGING_ENABLED[Logging]public class MyClass: ContextBoundObject
#elsepublic class MyClass
#endif{...}但显然,LOGGING_ENABLED将是未定义的,因为它实际上并不引用Config.LOGGING_ENABLED.有没有办法在另一个类中引用常量成员?我不想将#define LOGGING...