第一范文网 - 专业文章范例文档资料分享平台

C#语言规范5.0中文版

来源:用户分享 时间:2025/5/22 5:48:17 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

章节 错误!使用“开始”选项卡将 Heading 1 应用于要在此处显示的文字。 错误!使用“开始”选项卡将 Heading 1 应用于要在

public class Operation: Expression {

Expression left; char op;

Expression right; }

public Operation(Expression left, char op, Expression right) { this.left = left; this.op = op;

this.right = right; }

public override double Evaluate(Hashtable vars) { double x = left.Evaluate(vars); double y = right.Evaluate(vars); switch (op) {

case '+': return x + y; case '-': return x - y; case '*': return x * y; case '/': return x / y; }

throw new Exception(\}

上面的四个类可用于为算术表达式建模。例如,使用这些类的实例,表达式 x + 3 可如下表示。

Expression e = new Operation( new VariableReference(\ '+',

new Constant(3));

代码中调用了 Expression 实例的 Evaluate 方法,以计算给定表达式的值,从而生成一个 double 值。该方法接受一个包含变量名称(作为哈希表项的键)和值(作为项的值)的 Hashtable 作为实参。Evaluate 方法是一个虚抽象方法,意味着非抽象派生类必须重写该方法以提供实际的实现。

Constant 的 Evaluate 实现只是返回所存储的常量。VariableReference 的实现在哈希表中查找变量名称,并返回产生的值。Operation 的实现先对左操作数和右操作数求值(通过递归调用它们的 Evaluate 方法),然后执行给定的算术运算。

下面的程序使用 Expression 类,对于不同的 x 和 y 值,计算表达式 x * (y + 2) 的值。

using System;

using System.Collections; class Test {

static void Main() {

Expression e = new Operation( new VariableReference(\ '*',

new Operation(

new VariableReference(\ '+',

new Constant(2) ) );

Hashtable vars = new Hashtable(); vars[\vars[\

Console.WriteLine(e.Evaluate(vars));

// Outputs \

版权所有 ? Microsoft Corporation 1999-2012。保留所有权利。

19

C# LANGUAGE SPECIFICATION

}

vars[\ vars[\

Console.WriteLine(e.Evaluate(vars)); }

// Outputs \

1.6.6.5 方法重载

方法重载 (overloading) 允许同一类中的多个方法具有相同名称,条件是这些方法具有唯一的签名。在编译一个重载方法的调用时,编译器使用重载决策 (overload resolution) 确定要调用的特定方法。重载决策将查找与参数最佳匹配的方法,如果没有找到任何最佳匹配的方法则报告错误信息。下面的示例演示重载决策的工作机制。Main 方法中的每个调用的注释表明实际调用的方法。

class Test {

static void F() {

Console.WriteLine(\ } }

static void F(object x) {

Console.WriteLine(\}

static void F(int x) {

Console.WriteLine(\}

static void F(double x) {

Console.WriteLine(\}

static void F(T x) {

Console.WriteLine(\}

static void F(double x, double y) {

Console.WriteLine(\}

static void Main() {

F(); // Invokes F() F(1); // Invokes F(int) F(1.0); // Invokes F(double) F(\ // Invokes F(object) F((double)1); // Invokes F(double) F((object)1); // Invokes F(object) F(1); // Invokes F(T)

F(1, 1); // Invokes F(double, double) }

正如该示例所示,总是通过显式地将实参强制转换为确切的参数类型和/或显式地提供类型实参,来选择一个特定的方法。 1.6.7 其他函数成员

包含可执行代码的成员统称为类的函数成员 (function member)。前一节描述的方法是函数成员的主要类型。本节介绍了 C# 支持的其他类型的函数成员:构造函数、属性、索引器、事件、运算符和析构函数。 下表演示一个名为 List 的泛型类,它实现一个可增长的对象列表。该类包含了几种最常见的函数成员的示例。

20

版权所有 ? Microsoft Corporation 1999-2012。保留所有权利。

章节 错误!使用“开始”选项卡将 Heading 1 应用于要在此处显示的文字。 错误!使用“开始”选项卡将 Heading 1 应用于要在

public class List { const int defaultCapacity = 4; 常量 T[] items; int count; 字段 public List(int capacity = defaultCapacity) { items = new T[capacity]; 构造函数 } public int Count { get { return count; } 属性 } public int Capacity { get { return items.Length; } set { if (value < count) value = count; if (value != items.Length) { T[] newItems = new T[value]; Array.Copy(items, 0, newItems, 0, count); } items = newItems; } }

版权所有 ? Microsoft Corporation 1999-2012。保留所有权利。

21

C# LANGUAGE SPECIFICATION

public T this[int index] { get { return items[index]; } set { items[index] = value; OnChanged(); } } 索引器 public void Add(T item) { if (count == Capacity) Capacity = count * 2; items[count] = item; count++; OnChanged(); } protected virtual void OnChanged() { if (Changed != null) Changed(this, EventArgs.Empty); } public override bool Equals(object other) { return Equals(this, other as List); } static bool Equals(List a, List b) { if (a == null) return b == null; if (b == null || a.count != b.count) return false; for (int i = 0; i < a.count; i++) { if (!object.Equals(a.items[i], b.items[i])) { return false; } } return true; } } public event EventHandler Changed; public static bool operator ==(List a, List b) { return Equals(a, b); } public static bool operator !=(List a, List b) { return !Equals(a, b); } 方法 事件 运算符

1.6.7.1 构造函数

C# 支持两种构造函数:实例构造函数和静态构造函数。实例构造函数 (instance constructor) 是实现初始化类实例所需操作的成员。静态构造函数 (static constructor) 是一种用于在第一次加载类本身时实现其初始化所需操作的成员。

构造函数的声明如同方法一样,不过它没有返回类型,并且它的名称与其所属的类的名称相同。如果构造函数声明包含 static 修饰符,则它声明了一个静态构造函数。否则,它声明的是一个实例构造函数。 实例构造函数可以被重载。例如,List 类声明了两个实例构造函数,一个无参数,另一个接受一个 int 参数。实例构造函数使用 new 运算符进行调用。下面的语句分别使用 List 类的每个构造函数分配两个 List 实例。

List list1 = new List(); List list2 = new List(10);

22

版权所有 ? Microsoft Corporation 1999-2012。保留所有权利。

搜索更多关于: C#语言规范5.0中文版 的文档
C#语言规范5.0中文版.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c0i5iv207vu8qp211380g_10.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top