c#学习笔记(1)_c#教程

2008-02-23 05:46:48来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

1, 结构(struct) 和 类(class)
[attributes] [modifiers] struct identifier [:interfaces] body [;]
结构和类很相似,都表示能够包含数据成员和函数成员的数据结构。和类不同的是,结构是值类型并且无需堆分配。结构类型的变量直接包含结构的数据,而类类型的变量包含对数据的引用(该变量称为对象)。 struct 类型适合表示如点、矩形和颜色这样的轻量对象。尽管可能将一个点表示为类,但结构在某些方案中更有效。在一些情况下,结构的成本较低。例如,假如声明一个含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存。结构能够声明构造函数,但他们必须带参数。声明结构的默认(无参数)构造函数是错误的。总是提供默认构造函数以将结构成员初始化为他们的默认值。在结构中初始化实例字段是错误的。在类中,必须初始化实例对象. 使用 new 运算符创建结构对象时,将创建该结构对象,并且调用适当的构造函数。和类不同的是,结构的实例化能够不使用 new 运算符。假如不使用 new,那么在初始化任何字段之前,字段将保持未赋值状态且对象不可用。对于结构,不像类那样存在继承。一个结构不能从另一个结构或类继承,而且不能作为一个类的基。但是,结构从基类 Object 继承。结构可实现接口,其方式同类完全相同。
[c ] 和 C 不同,无法使用 struct 关键字声明类。在 C# 中,类和结构在语义上是不同的。结构是值类型,而类是引用类型。
2, 装箱和拆箱(取消装箱)
装箱是值类型到 object 类型或到该值类型所实现的任何接口类型的隐式转换。将一个值的值装箱会分配一个对象实例并将该值复制到新的对象中。关键字 object. 取消装箱是从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换。取消装箱操作包括:检查对象实例,确保他是给定值类型的一个装箱值。将该值从实例复制到值类型变量中。
例:
int i = 123; // A value type
object box = i; // Boxing
int j = (int)box; // Unboxing

装箱转换
取消装箱
3 , 隐式和显式
下列转换属于隐式转换:例:object o=i;
标识转换。
隐式数值转换。
隐式枚举转换。
隐式引用转换。
装箱转换。
隐式常数表达式转换。
用户定义的隐式转换。
下列转换属于显式转换: object 0=(object)i;
任何隐式转换。
显式数值转换。
显式枚举转换。
显式引用转换。
显式接口转换。
取消装箱转换。
用户定义的显式转换
4, delegate(委托)
delegate void D(int x);
class C{
public static void M1(int i) { /* ... */ }
public static void M2(int i) { /* ... */ }}
class{…….D cd1 = new D(C.M1);………….}
委托是个数据结构,该数据结构引用一个静态方法,或引用一个对象实例和该对象的实例方法。在 C 或 C 中和委托最接近的是函数指针,但函数指针只能引用静态函数,而委托能够同时引用静态方法和实例方法。在后一种情况中,委托不但存储对方法入口点的引用,还存储对调用其方法的对象的引用。和 C 函数指针不同,委托是完全面对对象的;和指向成员函数的 C 指针不同,委托同时封装对象实例和方法。委托声明定义从类 System.Delegate 派生的类。委托实例封装一个或多个方法,每个方法都被称为可调用实体。对于实例方法,可调用实体由一个实例和该实例上的方法组成。对于静态方法,可调用实体仅由一个方法组成。给定委托实例和适当的参数集,便能够用该参数集调用此委托实例的任何方法。委托实例的一个有趣和有用的属性是他不了解或不关心他所封装的方法的类;真正重要的只是方法要和委托的类型兼容, 这使委托很适合“匿名”调用。可选的形参表指定委托的参数,而返回类型则指示委托的返回类型。假如下面两个条件都为真,则方法和委托类型是兼容的:(兼容的概念就是能够用此声明的委托对方法进行委托).
1他们具备相同的参数数目,并且类型相同,顺序相同,参数修饰符也相同。
2他们的返回类型相同。
C# 中的委托类型是名称等效的,而不是结构等效的。(但是请注意:两个不同但结构上等效的委托类型的实例可能会比较为相等),准确地说,两个具备相同参数列表、签名和返回类型的不同的委托类型被认为是不同的委托类型。委托实例所封装的方法集合称为调用列表。
5, interface(接口)
[attributes] [modifiers] interface identifier [:base-list] {interface-body}[;]
一个接口定义一个协定。实现接口的类或结构必须遵守其协定。接口能够从多个基接口继承,而类或结构能够实现多个接口。接口能够包含方法、属性、事件和索引器。接口本身不提供他所定义的成员的实现。接口只指定实现该接口的类或接口必须提供的成员。接口能够是命名空间或类的成员,并且能够包含下列成员的签名:方法属性 索引器.
一个接口可从一个或多个基接口继承。接口可由类实现。实现的接口的标识符出现在类的基列表中。被继承的接口称为该接口的显式基接口。当接口具备一个或多个显式基接口时,在该接口声明中,接口标识符后跟一个冒号连同由逗号分隔的基接口标识符列表。接口的基接口是显式基接口及其基接口。换言之,基接口集是显式基接口、他们的显式基接口(依此类推)的完全可传递的闭包。接口继承其基接口的任何成员。接口成员是通过 I.M 和 I[A] 形式的成员访问和索引访问表达式访问的,其中 I 是接口类型的实例,M 是该接口类型的方法、属性或事件,A 是索引器参数列表。接口能够由类和结构实现。为了指示类或结构实现接口,在该类或结构的基类列表中包含了接口标识符。在实现类或结构中定位接口成员的实现的过程称为接口映射。
6,object
object 类类型是任何其他类型的最终基类。C# 中的每种类型都是直接或间接从 object 类类型派生的。能够把任何类型的数值给object类型.
7,string类型
string 类的实例表示 Unicode 字符串。尽管 string 是引用类型,但相等运算符(== 和 !=)被定义为比较 string 对象(而不是引用)的“值”(7.9.7 字符串相等运算符)。这使得对字符串相等性的测试更为直观。字符串为 string 类型并可写成两种形式,即用引号引起来和用 @ 引起来。用引号引起来的字符串括在双引号 (") 内, 并且能够包含包括换码序列在内的任何字符用 @ 引起来的字符串以 @ 开头,并用双引号引起来。用 @ 引起来的字符串以 @ 开头,并用双引号引起来。若要在一个用 @ 引起来的字符串中包括一个双引号,请使用两对双引号:@ 符号的另一种用法是使用碰巧成为 C# 关键字的被引用的 (/reference) 标识符。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: c#学习笔记(2)_c#教程

下一篇: 使用c#研发一个简单的p2p应用_c#应用