C#基础知识文章关闭所有内容预览 | 展开所有内容预览
-
C#的即时编译器(JITters)
[内容预览]
986 | 2010-09-29
由C#或其它能产生受管代码的编译器所生成的受管代码就是IL码。虽然IL代码被包装在一个有效的PE文件中,但是你还是不能执行它,除非它被转换成为受管原始代码。这就是NGWS runtime 即时编译器(也称作JITters)大显身手的时候。 为什么你会对即时编译代码感到厌繁, 为什么不把整个IL PE文件编译成原始代码? 答案是时间——需要把IL代码编译成CPU规ge的代码...
[阅读全文]
-
命名空间的一个错误使用
[内容预览]
328 | 2010-09-23
在编译单元或命名空间的成员声明中命名空间中,包含的类型可以被成员直接使用。例如: namespace N1.N2 { class A {} } namespace N3 { using N1.N2; class B: A {} } 一个命名空间使用指示符导入了在给出的命名空间中包含的类型,但没有引入嵌套的命名空间。见下例: namespace N1.N2...
[阅读全文]
-
例解C#命名空间的使用方法
[内容预览]
927 | 2010-09-23
本文以一个Welcome程序讲解了命名空间的使用方法。文中将“Welcome” 程序分为两部分:库和控制台两部分。库用来提供显示的消息,控制台程序执行显示。 下面是一个库文件,其中包含了一个WelcomeMessage 类。 // 库文件WelcomeLibrary.cs namespace MyProgram.CSharp.FirstApp { public class Welcom...
[阅读全文]
-
C#用ToString方法格式化字符串示例
[内容预览]
769 | 2010-09-22
C#用ToString方法格式化字符串示例, Public string ToString(string format,IformatProvider provider) 第一个参数是格式说明符,第二个参数是格式提供者。如果缺少format字符串,就调用方法System.Iconvertible.ToString(),它公包含了IformatProvider参数,并且作用一个默认格式。如果没有...
[阅读全文]
-
C#的虚拟对象系统
[内容预览]
298 | 2010-09-14
.NET 跨语言集成的特性来自于虚拟对象系统(VOS) 的支持。在不同语言间进行代码复用和应用集成中所遇到的最大问题是不同语言类型系统间的相容性问题,可以想象不同的语言虽然语法结构大体相同,但数据类型与语言环境本身的各种特点联系紧密,很难想象一种解释性的语言所拥有的数据类型会与一种编译语言相同,而即使相同的数据类型在不同的语言环境中表示的意义也存在差别,例如,同样是整数类型,在 MSSQL 中的长...
[阅读全文]
-
C#显式枚举转换
[内容预览]
537 | 2010-09-14
显式枚举转换包括以下内容: 从 sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, 或 decimal 到任何枚举类型 从任何枚举类型到 sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, 或 decimal...
[阅读全文]
-
C#的显式数据类型转换
[内容预览]
260 | 2010-09-14
显式类型转换又叫强制类型转换。与隐式转换正好相反,显式转换需要用户明确地指定转换的类型, 比如下面的例子把一个类型显式转换为类型: long l = 5000; int i = (int) l; 显式转换可以发生在表达式的计算过程中 它并不是总能成功 而且常常可能引起信息丢失,显式转换包括所有的隐式转换 也就是说把任何系统允许的隐式转换写成显式转换的形式都是允许的 如: int i =...
[阅读全文]
-
关于C#的隐式枚举转换
[内容预览]
349 | 2010-09-14
隐式枚举转换允许把十进制整数0 转换成任何枚举类型,对应其它的整数则不存在这种隐式转换,下面用一个例子来具体说明本问题: using System; enum Weekday{ Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday }; class Test { public static void Main(...
[阅读全文]
-
[图文] 详解C#中访问私有成员的方法
[内容预览]
363 | 2010-09-12
首先访问一个类的私有成员不是什么好做法。大家都知道私有成员在外部是不能被访问的。一个类中会存在很多私有成员:如私有字段、私有属性、私有方法。对于私有成员造访,可以套用下面这种非常好的方式去解决。 private string name; public string Name { get { return name; } set { name = value; } } 但是有时候,源代码是...
[阅读全文]
-
[图文] C#静态方法和实例方法辨析和实例
[内容预览]
273 | 2010-09-12
本文将围绕c#静态方法和实例方法讨论一下。针对一些观点,如:"静态方法是常驻内存", 还有"静态方法比实例方法先装载",做一个辨析。同时讨论下何时用静态方法,何时用实例方法。 前几日,在微软的好友发给我一个链接:《静态方法和实例化方法之间的区别你知道了嘛? 欢迎讨论!! - 问题最终 ...》,然后说这里某些观点需要澄清一下,希望我写一篇blog。我当时读了这篇blog. 文比较短,列举了静态方...
[阅读全文]
-
C#数据类型的转换方法
[内容预览]
1489 | 2010-09-09
C#中的数据类型有两种转换方式:隐式转换和显式转换,即强制转换,也可以用类型转换方法来进行命令式显式转换。 1)隐式转换 与C++一样,当转换不会造成信息丢失时,C# 一般会采用自动的隐式转换(implicit conversion)。隐式转换包括对数值、枚举和引用的隐式转换。隐式转换可以发生在方法调用、表达式计算和分配时。但是不存在到字符类型char的隐式转换。数值类型的隐式转换参见表17-...
[阅读全文]
-
C# 操作符优先级表(从高到低)
[内容预览]
1488 | 2010-09-09
C# 运算符优先级表(从高到低) 优先级 类型 运算符 1 基元 .(成员,如x.y)、( )(方法,如f(x))、[ ](数组,如a)、++(后缀增,如i++)、--(后缀减,如i--)、new(创建对象,如new MyClass)...
[阅读全文]
-
checked与unchecked操作符
[内容预览]
224 | 2010-09-09
checked(已检验)——用于设置溢出检验上下文(overflow-checking context),控制对整型算术表达式中的操作和转换进行溢出检验,在出现溢出时会抛出异常。格式为:checked(表达式)或checked{语句块}。 unchecked(未检验)——用于设置溢出检验上下文(overflow-checking context),...
[阅读全文]
-
C#的简单类型
[内容预览]
471 | 2010-09-09
简单类型属于C# 语言的值类型,对应于C++语言的基本类型,包括字符、布尔类型、以及整数和实数等数值类型。与C++/CLI相似,C# 中的基本类型都与.NET框架的System命名空间中的对应类型等同,是它们的别名,参见下表: C# 的简单类型 C#类型 C++/CLI类型 .NET框架类型 值类...
[阅读全文]
-
C#中的分部类
[内容预览]
416 | 2010-09-07
分部类和结构是在类和结构的声明中,使用了partial修饰符的类和结构。位于不同文件中的同一个分部类,必须位于同一个命名空间或包含类型(对嵌入式分部类)之中,而且在所有类修饰符必须完全一致。对泛型类,还要求声明中的类型参数和对类型参数的约束也完全一致。但是类的属性、基类和实现接口的列表却可以不同。另外,分部类也可以用作嵌套类,不过其包含类必须也是分部类。 编译时,编译器会合并位于不同文件中的同一...
[阅读全文]
-
C#中的object与System.Object
[内容预览]
2102 | 2010-09-07
C# 中的关键字object是.NET的System.Object类的别名,它是所有C# 类型和.NET类型的根基类(ultimate base class)。在声明时,没有给出基类的类,C# 编译器都自动假定其派生于Object类。 System.Object类是.NET框架中所有类的最终基类,是类型层次结构的根。它支持.NET框架类层次结构中的所有类,并为派生类提供低级别服务。下面是Obje...
[阅读全文]
-
C#继承的种类
[内容预览]
618 | 2010-09-07
C# 中的继承有两种类型: 实现继承(类继承)——派生类型继承了基类型的所有成员,包括方法、属性、事件和索引的实现代码,派生类既可以直接调用基类的各种函数成员的实现代码,也可以自己编写代码来覆盖或重写它们,还可以为派生类添加新的数据和函数成员。 接口继承(非实现继承)——派生类型只继承了基类型中的函数签名(signature of a funct...
[阅读全文]
-
C#中的接口
[内容预览]
285 | 2010-09-07
接口(interface,界面)的概念来源于组件编程的思想。接口定义统一的公用方法的原型,但是不包含方法的具体实现代码,方法体(代码)由实现接口的类来定义(编写)。 所以接口定义的是一种契约(contract),实现该接口的类则遵守(adhere)此契约。接口相当于组件的界面,供使用组件的用户查询和调用,而实现接口的类则是组件的编码模块本身。 在C# 中,一个接口可以继承自多个接口,一个类也可...
[阅读全文]
-
C#中使用的修饰符
[内容预览]
191 | 2010-09-07
在C# 的类型和成员的声明中,使用了大量的修饰符,其中有许多是C# 特有的。下面将它们分类汇总,并进行一些简单的比较和分析。其中用粗体表示的修饰符是C++中没有的。 1)类型可见性修饰符与成员访问修饰符——参见下表。 C# 的类型可见性与成员访问修饰符 修饰符 应用对象 说明 ...
[阅读全文]
-
C#中的密封方法
[内容预览]
461 | 2010-09-07
C# 增加的sealed(密封的)关键字,用于修饰方法和类,表示继承来的虚方法不能被其派生类再重写和类不能被继承。分别被称为密封方法和密封类,其中密封方法必须同override一起使用。例如: using System; class A { public virtual void F() { Console.WriteLine("A.F"); } public virt...
[阅读全文]
-
C#中的委托
[内容预览]
242 | 2010-09-07
C# 和.NET的委托(delegate)与C/C++中的回调函数类似,但是委托比函数指针更安全。因为回调函数只是一个指向存储函数体的内存指针,无法知晓函数的形参和返回类型,也不能保证指针所指的内容一定是所需要的函数体。 当需要将函数作为参数来传递时,才需要函数指针和委托。主要用于启动线程、编写通用类库和事件处理。 C# 中委托的声明格式为: [[属性]] [委托修饰符] delegate ...
[阅读全文]
-
C#中的匿名方法
[内容预览]
211 | 2010-09-07
除了利用方法签名来定义委托之外,在C# 中还可以通过匿名方法(anonymous method)来使用委托。所谓匿名方法,是用作委托参数的一个代码块(代替原来用作定义委托实例时的参数的处理函数[体])。其定义格式为: delegate [([形参列表])] {……} 例如: using System; delegate int D(); class Test { static ...
[阅读全文]
-
C#中的事件
[内容预览]
246 | 2010-09-07
事件(event)被广泛用于对象间的通信,例如Windows的应用程序就是基于消息机制的。C# 事件除了表示发生了某个有意义的事件外,还表示已经定义了一个可以处理通知的对象(委托)。 事件的两种声明格式在前面的类成员说明中已经给出。 即平凡事件格式: [[属性]] [事件修饰符] event 委托类型 标识符[ = 表达式 或 数组初始化器][, ……]; 或非平凡事件格式: [[属性]...
[阅读全文]
-
C#中的枚举类型
[内容预览]
763 | 2010-09-05
与C/C++类似,C# 中的枚举(enumeration)类型也是一个命名常量的集合。枚举声明的完整格式为(灰色方括号[ ]中的内容是可选的): [[属性]] [枚举修饰符] enum 标识符 [: 整型基类型] { [[属性]] 标识符 [ = 常量表达式], …… [[属性]] 标识符 [ = 常量表达式] }[;] 其中,枚举修饰符有:new、public、protecte...
[阅读全文]
-
C#的值类型与引用类型
[内容预览]
227 | 2010-09-05
与C++一样,C# 也是一种强类型语言,其每个变量和对象也都必须具有被预先声明的类型。但是由于C# 是专门为.NET设计的语言,所以它的类型体系与C++有很大的不同,而与.NET框架一致。 C# 有如下两大类型种类: (1)值类型——包括简单、枚举、结构和指针等类型。该类型的变量存储数据本身,对值类型的变量进行赋值时,会复制变量所包含的值。其中的指针类型,仅可用于uns...
[阅读全文]
-
C#中的可空类型
[内容预览]
396 | 2010-09-05
不能使用的对象,可以用设置其值为空null来标识。但是基本值类型是不能赋值为空的,那会导致编译错误。传统的经验解决办法是赋给其一个取值范围之外的值,如“-1”(0xFFFFFFFF),但这种方法并不标准。 现在C# 给出了一种完美的解决方案——可空类型(nullable type):声明值类型的变量时,在变量名后添加可空类型的问号符“?”,则该变量成为可空类型,可以被赋值...
[阅读全文]
-
C# 中@字符的使用
[内容预览]
179 | 2010-09-05
C# 新引进的逐字符(verbatim character)@,可以避免解析字符串中的转移字符和标识符中的关键字等: (1)逐字字符串(verbatim string)——@"……",不解析其中的转移序列。例如: string fn = @"C:\Doc\data.txt"; (2)逐字标识符(verbatim identifier)——@标识...
[阅读全文]
-
C#程序代码注释
[内容预览]
1097 | 2010-09-04
在源程序代码中加上注释是优秀编程人员应该养成的好习惯。C#中添加注释的方法有多种,不过最有特点的是可以使用XML的格式添加注释,从而减少了许多复杂的工作,也避免了注释和说明文件不一致的情况。 1. 常规注释方式 (1)单行:以“//”符号开始,任何位于“//”符号之后的本行文字都视为注释。 (2)多行:以“/*”开始,“*/”结束。任何介于这两对符号之间的文字都视为注释。 2. XML注释...
[阅读全文]
-
实例说明C#程序的一般格式
[内容预览]
425 | 2010-09-04
本文通过一个较为完整的控制台应用程序项目说明编写一般C#应用程序的格式。 所给例子的代码中有三个类,分别是Program类、HelloName类和HelloMe类,其中Program类包含了Main方法,在Main方法中使用了局部变量i;HelloName类中声明了一些字段,并提供了构造函数;HelloMe类中除了字段和构造函数外,还提供了Welcome方法。 在这个例子中,我们主要关注的应该...
[阅读全文]
-
C#应用程序的结构
[内容预览]
517 | 2010-09-04
在C#中,每一个应用程序可以由一个或者多个类组成,所有的程序都必须封装在某个类中,即一个完整的C#应用程序至少有一个类。一个应用程序可以由一个文件组成,也可以由多个文件组成,文件名可以和类名相同,也可以不同。C#源程序文件的扩展名为.cs,比如WindowsApplication1.cs,一个源文件中可以有一个类,也可以有多个类;如果加上partial修饰符,也可以把一个类分散保存到多个文件中,然...
[阅读全文]