摘要: C#引入了readonly修饰符来表示只读域,const来表示不变常量。顾名思义对只读域不能进行写操作,不变常量不能被修改,这两者到底有什么区别呢?只读域只能在初始化--声明初始化或构造器初始化--的过程中赋值,其他地方不能进行对只读域的赋值操作,否则编译器会报错。只读域可以是实例域也可以是静态域。只读域的类型可以是C#语言的任何类型。但const修饰的常量必须在声明的同时赋值,而且要求编译器能够在编译时期计算出这个确定的值。const修饰的常量为静态变量,不能够为对象所获取。 const修饰的值的类型也有限制,它只能为下列类型之一(或能够转换为下列类型的):sbyte, byte, s... 阅读全文
posted @ 2014-04-01 14:55 krus 阅读(344) 评论(0) 推荐(0) 编辑
摘要: const和readonly关键字也是面试中经常考到的问题,通常都是用来表示一个不可变的变量成员,那么具体区别是什么?从用法上说,const只能以inline代码的形式定义,而readonly既可以以inline代码形式定义也可以通过构造方法定义。CLR中定义,readonly的变量只能在构造方法中赋值,而C#中inline代码实际上是构造方法调用的一部分,因此readonly的变量可以以inline的方式赋值。以上是语法方面的应用,那在实际上的用法上,还是有些微妙的变化,通常不易发觉,请看下面的代码在程序集ConstLib.dll中有一个类MyClass,定义了一个公开的静态变量MaxC.. 阅读全文
posted @ 2014-04-01 14:40 krus 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 大家在实际工作学习C#的时候,可能会问:为什么我们要为一些已经存在的功能(比如Windows中的一些功能,C++中已经编写好的一些方法)要重新编写代码,C#有没有方法可以直接都用这些原本已经存在的功能呢?答案是肯定的,大家可以通过C#中的DllImport直接调用这些功能。 DllImport所在的名字空间 using System.Runtime.InteropServices; MSDN中对DllImportAttribute的解释是这样的:可将该属性应用于方法。DllImportAttribute 属性提供对从非托管 DLL 导出的函数进行调用所必需的信息。作为最低要求,必须提供... 阅读全文
posted @ 2014-04-01 13:52 krus 阅读(135) 评论(0) 推荐(0) 编辑