CSDN博客

img eblog

使用 Microsoft Visual C# 2005 Express Edition 编程简介

发表于2004/9/20 13:41:00  3122人阅读

发布日期: 9/9/2004 | 更新日期: 9/9/2004

Andrew W. Troelsen
Intertech Training

摘要:本文介绍了如何以使用 Microsoft Visual C# 2005 Express Edition 集成开发环境 (IDE) 的 C# 语言进行编程。本文通过各种示例项目,为读者介绍了 C# 编程语言的几个方面和 .NET 平台的主要概念。

下载 Code.msi 示例文件

本文假定读者是有兴趣探究使用 Visual C# 2005 Express Edition 的 C# 语言和 .NET 平台的业余爱好者、学生或有编程思想的个人。不要求您之前一定接触过 C#,但以前的一些编程经验将有所帮助。

*

适用于:
Microsoft Visual C# 2005 Express Edition

本页内容
什么是 Visual C# 2005 Express Edition? 什么是 Visual C# 2005 Express Edition?
Visual C# 2005 Express 的高级功能 Visual C# 2005 Express 的高级功能
Visual C# 2005 Express 项目 Visual C# 2005 Express 项目
程序集、命名空间和类型 程序集、命名空间和类型
从理论到实践:使用外部类型 从理论到实践:使用外部类型
通过 C# Express 处理异常 通过 C# Express 处理异常
通过编程方式处理异常 通过编程方式处理异常
创建 C# 类库项目 创建 C# 类库项目
构建 Windows 窗体应用程序 构建 Windows 窗体应用程序
开始进行编码:Visual C# 2005 Express 起始工具包 开始进行编码:Visual C# 2005 Express 起始工具包
小结 小结

什么是 Visual C# 2005 Express Edition?

.NET 应用程序可以使用多种方法创建。顽固的开发人员可以采用突击方法,使用精简的文本编辑器(例如,notepad.exe)和 C# 命令行编译器 (csc.exe) 来构建 .NET 程序。虽然 .NET 软件开发工具包 (SDK) 可以从 Microsoft 站点 (www.microsoft.com/net) 免费下载,但这种方法会带来许多麻烦,因为它在 SDK 中不提供代码生成实用工具(向导)、图形调试器和 IntelliSense 功能。

为了帮助减轻在命令行构建软件的负担,许多 .NET 开发人员都利用可视化工具,例如,Microsoft 功能齐全的 IDE 和 Visual Studio .NET 2003 (http://msdn.microsoft.com/vstudio)。虽然此产品的功能非常强大,但对于 .NET 业余爱好者和/或大学生来说,企业版的价格过高。老实说,除非您是专业的软件工程师,否则 Visual Studio .NET 2003 所提供的大量选项通常会使您的学习过程复杂化,而不会提供任何帮助。

介于 notepad.exe 和 Visual Studio .NET 2003 软件功能之间的就是 Microsoft 的最新 IDE,即 Visual C# 2005 Express Edition。在撰写本文时,测试版的 Visual C# 2005 Express Edition 已经通过 Web 下载 (http://msdn.microsoft.com/express) 免费提供。由于 Visual C# 2005 Express 的大小相对较小,因此即使是使用 56K 调制解调器连接,也可以轻松获得它。

Visual C# 2005 Express 实际上是 Express 家族的几个成员之一。具体来说,Microsoft 提供了下列 Express Edition 产品:

Visual Web Developer 2005 Express:一个使用 ASP.NET 构建动态 Web 站点和 XML Web 服务的轻型工具。

Visual Basic 2005 Express:一个供初级程序员学习如何构建 Windows 应用程序的理想的简化编程工具。

Visual C# 2005 Express、Visual C++ 2005 Express 和 Visual J# 2005 Express:针对希望学习计算机科学基本知识的学生和热衷者的目标编程工具。

SQL Server 2005 Express:一个适用于业余爱好者、热衷者和学生开发人员的入门级数据库管理系统。

简单地说,Express Edition 产品系列是业余爱好者、学生和新手了解 .NET 平台的理想入门工具。如果您属于其中一员,请下载并安装 Visual C# 2005 Express,然后继续阅读此文。

Visual C# 2005 Express 的高级功能

Visual C# 2005 Express 提供了许多您在 .NET 开发环境中需要的关键功能,例如:

与 ANSI 兼容的 C# 2.0 编译器

功能齐全的集成调试器

高级 IntelliSense 功能

针对 Windows 窗体开发的设计时支持

支持本地数据库访问

十分轻松地访问 XML Web 服务

您还需要了解 Visual C# 2005 Express 不支持的功能。具体来说,Visual C# 2005 Express 不直接支持以下功能:

ASP.NET Web 应用程序

XML Web 服务的结构

移动应用程序开发(手机、PDA、Windows CE 设备)

远程数据库连接工具

在下文中,我们将为您介绍使用 Visual C# 2005 Express 的 C# 和 .NET 平台。但是请注意,本文不是 有关 C# 编程语言、.NET 平台或 Visual C# 2005 Express IDE 的综合教程。本文结尾处提供了指向 .NET Web 站点的其他链接,以进一步强化您的学习过程。

Visual C# 2005 Express 项目

Visual C# 2005 Express 项目由任意数量的 C# 源代码文件(使用 *.cs 文件扩展名)组成,它支持内容文件(XML 文档、应用程序图标和图像等)和引用的程序集(在本文后面详细说明)。Visual C# 2005 Express 提供了许多核心项目类型(在下表中有描述),而不是强制我们为特定类型的项目(Windows 窗体应用程序、控制台应用程序等)创建相同的公式化代码。

Visual C# 2005 Express 项目类型 定义

Windows 应用程序

创建新的 Windows 窗体项目。

此类项目用于创建诸如 Microsoft Word 之类的桌面应用程序。

类库

此项目用于创建可重复使用的代码库(打包为 *.dll 文件),该代码库可以跨您的 .NET 应用程序使用。

控制台应用程序

此项目可以创建基于控制台的应用程序。

在学习新的编程语言(例如,C#)时,这些应用程序非常有用,因为您不需要考虑图形用户界面 (GUI) 的结构。

空项目

该选项可以生成没有初始 C# 代码文件的项目。在您希望使用 Project | Add Existing Item 菜单项将现有文件导入新项目时,该选项十分有用。

为了开始研究 C#,我们将创建一个名为 MyCSharpExpressApp 的全新控制台应用程序。File | New | Project 菜单选择可以激活一个新的项目对话框,如图 1 所示。

usingcsharpexpress-fig1

图 1. 创建新的控制台应用程序项目

此时,您可能希望使用 File | Save All 菜单选择进行保存。在得到的对话框中,指定您选择的位置,如图 2 所示。

usingcsharpexpress-fig2

图 2. 保存当前项目

第一个控制台应用程序将不会提供很多功能,它只是作为一个检查某些基本概念的工具。在本文后面,我们将构建一个完整(且更有趣)的应用程序。

程序集、命名空间和类型

在我们深入研究第一个示例之前,需要了解 .NET 编程方面的一些关键术语。在我为软件专业人员授课的几年中,我可以肯定地说,程序集命名空间类型 之间的区别总是让新的 .NET 开发人员感到迷惑不解。我们尽量不让这发生在您身上。

当您构建项目时,您实际上就是在创建 .NET 程序集。从形式上说,程序集就是一个物理文件(其文件扩展名通常是 *.exe 或 *.dll),您可以使用 Windows Explorer 在硬盘驱动器上直接查看此文件。

Visual C# 2005 Express 解决方案浏览器窗口将显示一个名为 References 的子文件夹,它列出了当前项目所使用的程序集的集合。但是,不同的项目需要引用一组唯一的程序集,图 3 显示了当前控制台应用程序的程序集。

usingcsharpexpress-fig3

图 3. 控制台应用程序项目引用的程序集

随着构建越来越精细的 .NET 应用程序,您通常需要使用特定项目所包含的集合以外的程序集。为此,C# Express 提供了“添加引用”对话框,它可以使用 Project | Add Reference 对话框激活。此时,您不必添加其他程序集。图 4 显示了上述对话框。

usingcsharpexpress-fig4

图 4. C# Express 的“添加引用”对话框

程序集包含一组命名空间。简单地说,命名空间就是一个在语义上相关的类型 的集合。您要知道,单个程序集通常会包含多个命名空间。例如,mscorlib.dll 程序集就包含文件输入和输出 (System.IO)、集合类型 (System.Collections)、通用实用工具类型 (System) 等等的命名空间。

每个 .NET 应用程序都会自动引用 mscorlib.dll,因此您无需手动引用该核心库。

命名空间可以定义任意数量的类型。对于 .NET 2.0,下表简要(关键字为简要)描述了 5 种类型。

.NET 类型 基本含义

Class

类是一个对象的设计图。与房屋的设计图一样,类可用于创建对象。与房屋一样,每个独立对象的属性可以完全不同(例如,蓝房子与红房子),但设计图将不会改变。

Interface

接口可以定义类或接口支持的一组公共方法。接口使您能够定义类或结构必须支持的一组成员。

Structure

简单地说,结构是轻型的类类型。在建模数学、几何或其他原子数据时,这种类型十分理想。结构缺少类的面向对象的功能,例如,继承。

Enumeration

枚举(英文简写为 enums)是名称/值对的已命名集合。枚举使您能够定义程序中使用的已知值。

Delegate

委托归结为类型安全的函数指针。这些类型是 .NET 事件体系结构的基础。无论您是处理按钮的 Click 事件,还是处理 ASP.NET Web 页的回发,委托都是基础结构。

当某个 C# 项目需要使用给定程序集中的类型时,第一步就是使用 Add Reference dialog 来引用 *.dll,如图 4 所示。第二步是在该文件的开头添加 using 指令,以指定您要访问的命名空间。实际上,C# 的 using 指令只是一个用于在代码中指定较长命名空间的缩写,它使我们能够在代码中只使用 File 来代替全名 System.IO.File。为了进行证明,您可以假定以下代码:

using System;

namespace SomeProgram
{
  class Program
  {
    static void Main(string[] args)
    {
      // Create an ArrayList and Hashtable 
      // (the hard way).
      System.Collections.ArrayList a =
        new System.Collections.ArrayList();
      System.Collections.Hashtable h =
        new System.Collections.Hashtable();
    }
  }
}

在此处,我们要创建 ArrayList 和 Hashtable 类型,它们都位于 System.Collections 命名空间中。使用以下 using 指令,您可以少键入一些内容,而不必将命名空间直接置于类型前面:

using System;
using System.Collections;  // Add this!

namespace SomeProgram
{
  class Program
  {
    static void Main(string[] args)
    {
      // Create an ArrayList and Hashtable 
      // (the easy way).
      ArrayList a = new ArrayList();
      Hashtable h = new Hashtable();
    }
  }
}

正如您猜想的那样,作为一个 .NET 程序员,您的主要目的是熟悉所使用的程序集、命名空间和类型。幸运的是,C# Express 提供了一个集成的对象浏览器实用工具,该工具可以从 View | Other Windows | Object Browser 菜单项激活。使用此工具,您可以查看每个引用程序集中的命名空间和类型,如图 5 所示。

usingcsharpexpress-fig5

图 5. C# Express 对象浏览器

从理论到实践:使用外部类型

现在,让我们向 MyCSharpExpressApp 项目中添加一些代码。在构建需要与本地文件系统进行交互的应用程序时,您需要使用 System.IO 命名空间。通过一个示例,更新您文件的 using 指令,并在 Main() 方法中输入以下代码:

#region Using directives
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;  // Need this for IO types!
#endregion

namespace MyCSharpExpressApp
{
  class Program
  {
    static void Main(string[] args)
    {
      // Open a file named myInfo.txt
      // located on the root C:/ drive.          
      string myFileContents;
      myFileContents = File.ReadAll(@"C:/myInfo.txt");

      // Now print it to the console.                
      Console.WriteLine(myFileContents);
      Console.ReadLine();    
    }
  }
}

该应用程序使用 File.ReadAll() 方法打开指定的文件,并以字符串的形式返回内容。在此例中,名为 myInfo.txt 的文件的内容将直接显示在控制台中。假定该文件是使用 notepad.exe 创建的,并且它只包含一行文本,如图 6 所示。

usingcsharpexpress-fig6

图 6. myInfo.txt 文件

将该文件直接保存在 C 驱动器中,然后使用 Debug | Start Without Debugging 菜单选项运行该应用程序。如果一切正常,您应该看到图 7 中显示的输出。

usingcsharpexpress-fig7

图 7. 您的第一个 C# Express 应用程序

如果该示例没有按预期方式运行,请继续阅读。下一部分说明了如何使用 Visual C# 2005 Express 调试运行时异常。

现在,假定您希望在 Windows 窗体消息框(而不是控制台)中显示此信息。为此,您需要执行下列操作:

引用 System.Windows.Forms.dll 程序集。

指定您要“使用”System.Windows.Forms 命名空间。

将从 File.ReadAll() 返回的字符串传递给 MessageBox.Show() 方法。

首先,使用图 8 中显示的 Add References 对话框引用 System.Windows.Forms.dll。

usingcsharpexpress-fig8

图 8. 引用 System.Windows.Forms.dll 程序集

然后,按以下方法更新代码:

#region Using directives
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;  // Need this for IO types!
using System.Windows.Forms;  // Need this for MessageBox!
#endregion

namespace MyCSharpExpressApp
{
  class Program
  {
    static void Main(string[] args)
    {
      // Open a file named myInfo.txt
      // located on the root C:/ drive.          
      string myFileContents;
      myFileContents = File.ReadAll(@"C:/myInfo.txt");

      // This time, place in a message box.      
      MessageBox.Show(myFileContents);
      Console.ReadLine();    
    }
  }
}

一旦您再次运行应用程序,就会发现显示在 Windows 窗体消息框中的文件内容与图 9 中的内容类似。

usingcsharpexpress-fig9

图 9. 与 MessageBox 类类型进行交互

通过 C# Express 处理异常

当前示例大胆假设了名为 myInfo.txt 的文件存在于根驱动器 C 上。如果不存在,您将收到一个运行时错误(更正式地说,是运行时异常)。Visual C# 2005 Express 可以帮助您诊断此类错误。为了进行证明,请删除(或重命名)myInfo.txt 文件,然后使用 Debug | Start 菜单选择来调试您的程序。正如您在图 10 中看到的那样,系统为您提供了大量有关当前异常的详细信息,以及用于更正该问题的建议。

usingcsharpexpress-fig10

图 10. 使用 Visual C# 2005 Express 调试异常

要修复当前问题,请将您的文本文件重命名为 myInfo.txt

通过编程方式处理异常

假设直到您的应用程序运行后才发现存在外部文件,那么 C# 程序员可以使用称为结构化异常处理 的技术。您将看到,结构化异常处理会涉及到使用少量 C# 关键字(最主要的是 trycatch)。

当您要调用可能会返回运行时异常的方法(例如,File.ReadAll() 方法)时,应将语句包装到 try 作用域中。如果触发了一个异常,则错误将传递到相关的 catch 作用域,您可以在该作用域中适当地处理此问题。如果 try 作用域中的每个语句在执行时都没有出现错误,那么将跳过整个 catch 块。若要直接进行测试,请按以下方法更新您的当前代码:

namespace MyCSharpExpressApp
{
  class Program
  {
    static void Main(string[] args)
    {
      // Attempt to open a file named myInfo.txt
      // located on the root C:/ drive.          
      string myFileContents;
      try
      {
        myFileContents = File.ReadAll(@"C:/myInfo.txt");
        MessageBox.Show(myFileContents);
      }
      catch(FileNotFoundException ex)
      {                
        Console.WriteLine("Error: {0}",
          ex.Message);
      }      
      Console.ReadLine();
    }
  }
}

在此处,我们使用了 FileNotFoundException 类的 Message 属性来格式化错误消息,以防止文件丢失,如图 11 所示。

usingcsharpexpress-fig11

图 11. 通过编程方式处理 FileNotFoundException

对该初始示例应用程序的说明到此为止。现在,您已经对基础知识有了更好的了解,下面让我们来创建一个更复杂(且更有趣)的 C# 应用程序。

创建 C# 类库项目

我们的下一个目标是构建一个名为 ManagerSpeakLib.dll 的 .NET 类库。首先,关闭当前的 MyCSharpExpressApp 项目(使用 File | Close Project),然后创建一个名为 ManagerSpeakLib 的新类库项目,如图 12 所示。请注意,如果您先前没有保存 MyCSharpExpressApp 项目,系统会显示一个“放弃”该项目的选项,以使您能够创建快速测试项目,同时避免让无用的代码搅乱您的系统。

usingcsharpexpress-fig12

图 12. 创建新的类库项目

这个类的角色(我们将其重命名为 ManagerSpeak)将返回随机生成的、模仿公司内部聊天的短语。使用名为 StateTheProblem() 的方法来更新 ManagerSpeak 类:

#region Using directives
using System;
using System.Collections.Generic;
using System.Text;
#endregion

namespace ManagerSpeakLib
{
  public class ManagerSpeak
  {
    public ManagerSpeak(){}

    // This method returns a randomly selected problem.
    public string StateTheProblem()
    {
      string[] possibleProblem = {
        "I think we really need to leverage...",
        "We can emerge as a dominant force if we optimize...",
        "To achieve an effective use of synergy we need to consider..."};
      Random r = new Random();
      return possibleProblem[r.Next(3)];
    }
  }
}

在此处,我们使用 System.Random 类来返回本地字符串数组中的三个语句之一。Next() 方法用于获取随机数,在此例中,是 0 与 2 之间的数(总共有三种可能:0、1、2)。

当然,每个问题都需要一个解决方案。因此,要向名为 GetSolution()ManagerSpeak 类中添加另一个方法:

public class ManagerSpeak
{
...
  // This method returns a randomly selected solution.
  public string GetSolution()
  {
    // String arrays with 10 segments each.
    string[] list1 = { "integrated",
      "individualized", "cooperative", "flexible", "authentic",
      "functional", "responsive", "alternative", "performance",
      "cognitive"};

    string[] list2 = { "behavioral",
      "relevant", "criteria", "prescriptive", "perceptual",
      "facilitated", "modular", "diagnostic", "structured",
      "situational"}; 

    string[] list3 = { "strategies",       
      "methodologies", "assessments",   "analysis",   "learning",      
      "interaction", "objectives", "concepts", "recoveries",
      "management"};
  
    // Make use of a System.Random type to 
    // obtain a random string from each array.
    Random r = new Random();
    int a = r.Next(10);
    int b = r.Next(10);
    int c = r.Next(10);

    // Now create and return the statement.
    string newMsg = list1[a] + " " + list2[b] + " " + list3[c];
    return newMsg;
  }
}

此时,请使用 File | Save All 菜单命令保存整个项目(在您选择的文件夹中)。通过激活 Build 菜单来编译您的新代码库。此时,您应该发现新代码库位于 Bin/Release 子目录下,如图 13 所示。

usingcsharpexpress-fig13

图 13. ManagerSpeakLib.dll 类库

您可能知道,*.dll 程序集无法通过从 Windows Explorer 中双击它们来直接执行,而是当其他应用程序请求它们时,由运行库来加载。这样,我们的下一步就是构建使用 ManagerSpeakLib.dll 的应用程序。

构建 Windows 窗体应用程序

要使用 ManagerSpeakLib.dll 的应用程序将是一个新的 Windows 窗体项目,名为 ManagerSpeakClient图 14)。

usingcsharpexpress-fig14

图 14. 构建 Windows 窗体应用程序

一旦项目被加载,您将注意到,视觉窗体设计器会自动打开,如图 15 所示。

usingcsharpexpress-fig15

图 15. Visual C# 2005 Express 窗体设计器

Visual C# 2005 Express 提供了大量工具,使您可以快速构建图形用户界面 (GUI)(所有界面都可以从 View 菜单访问)。例如,图 16 中显示的“工具箱”对话框显示了大量可用于构建窗体用户界面的 Windows 窗体组件。

usingcsharpexpress-fig16

图 16. Windows 窗体工具箱

根据相关说明,图 17 中显示的 Properties 窗口使您能够在设计时配置当前选择的小部件(窗体、按钮等)。

usingcsharpexpress-fig17

图 17.“属性”窗口

使用这些工具,创建一个由一个按钮和标签组成的简单用户界面,如图 18 所示。请注意,为了符合说明,我设置了标签、窗体和按钮的 Text 属性(使用 Properties 窗口)。

usingcsharpexpress-fig18

图 18. Manager Client 窗体

接下来,我们需要使用 Add References 对话框(再次使用 Project | Add Reference 菜单项激活)来引用 ManagerSpeakLib.dll。请注意,如果您希望引用自己的自定义 *.dll,则需要选择 Browse 选项卡,并手动导航到要使用的代码库的位置,如图 19 所示。

usingcsharpexpress-fig19

图 19. 引用 ManagerSpeakLib.dll 程序集

要完成我们的 Windows 窗体应用程序,请双击使用窗体设计器的按钮。这将自动处理按钮类型的 Click 事件,并生成以下代码:

private void button1_Click(object sender, EventArgs e)
{
        
}

此时,您可以随意添加代码来操作 ManagerSpeak 类。下面是完整的代码更新(请注意 ManagerSpeakLib 的 C# using 指令)。

#region Using directives
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using ManagerSpeakLib; // Need this!
#endregion

namespace ManagerSpeakClient
{
  partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      // Make a manager.
      ManagerSpeak m = new ManagerSpeak();

      // Get the problem.
      string currentProblem = m.StateTheProblem();

      // Get the solution.
      string solution = m.GetSolution();

      // Show the details!
      MessageBox.Show(string.Format("{0}/n{1}", 
                      currentProblem , solution)); 
    }
  }
}

现在,请运行您的 Windows 窗体应用程序,并单击按钮。您将看到随机产生的问题/解决方案,如图 20 所示,它以非常独特(通常是令人讨厌)的“管理者讲话”的语气表达。

usingcsharpexpress-fig20

图 20. 注意,管理者在讲话!

这包装了我们的 Windows 窗体应用程序。您可以使用 File | Save All 菜单选项随时将该项目保存在您的计算机上。

开始进行编码:Visual C# 2005 Express 起始工具包

此时,您已经创建了三个不同的 C# Express 项目(一个控制台程序、一个类库和一个 Windows 窗体应用程序)。虽然这篇介绍性的文章无法涵盖 C# 语言的所有方面(或 Visual C# 2005 Express 的完整功能),但我希望本文能够有助于您在将来更好地进行探究。

为了将本文内容汇总,我为您提供了一个起始工具包 主题。简单地说,起始工具包是一个完整的 C# 应用程序,旨在阐释大量的编程概念。此外,起始工具包还提供了完整文档、代码演练以及对扩展附加功能的建议。其中一个默认的起始工具包是 Screen Saver 起始工具包,您可以从图 21 中显示的 New Project 对话框中选择它。您可以使用 File | New | Project... 菜单选择来启动该工具包。

usingcsharpexpress-fig21

图 21. 选择 Screen Saver 起始工具包

一旦您选择了 Screen Saver 项目并单击 OK 按钮后,IDE 将加载该起始工具包的文档文件 (ScreenSaverStarterKit.htm),如图 22 所示。在此处,您可以了解当前项目的基本内容。

usingcsharpexpress-fig22

图 22. 了解 Screen Saver 起始工具包

正如您看到的那样,该起始工具包提供了每个代码文件的详细信息,以及项目设计的分步演练。您可以通过按 F5 键来运行该应用程序。如果您连接到 Internet,则能够看到显示在一组旋转背景图像顶端的 RSS(真正简单的联合)新闻头条。

小结

Visual C# 2005 Express 是新手了解 .NET 平台的理想入口点。正如您在本文中看到的那样,IDE 可以提供一组项目类型、一个图形调试器和大量 Windows 窗体设计器。虽然本文不提供完整的 IDE 介绍,但您可能更习惯于浏览活动项目。

本文的大部分内容都是在介绍 .NET 领域中的一些核心术语。现在回想一下,程序集 是包含任意数量命名空间 的二进制文件。命名空间可以定义任意数量的类型(类、接口、结构、枚举和委托)。使用这些类型,.NET 程序员可以构建各种应用程序。

希望本文能够激发您进一步了解 C# 和 .NET 平台的兴趣。如果您需要有关 C# 的其他信息,可能需要访问下列链接:

Sharp New Language: C# Offers the Power of C++ and Simplicity of Visual Basic

C# Programming Language Future Features

GotDotNet Web 站点

Andrew TroelsenIntertech 培训的顾问和培训师。Andrew 是很多书籍的作者,包括获奖的 C# and the .NET Platform Second Edition(Apress 出版社,2002 年)。他还为 MacTech 每月专栏的所有版面撰写文章,在该专栏中,他探讨了如何使用 SSCLI、Portible.NET 和 Mono CLI 分发软件在基于 Unix 的系统上开发 .NET。

转到原英文页面


 
0 0

相关博文

我的热门文章

img
取 消
img