c#

位置:IT落伍者 >> c# >> 浏览文章

叩开C#之门系列之几个重要名词


发布日期:2021年12月16日
 
叩开C#之门系列之几个重要名词

初学者很容易把这些概念搞混淆先说说项目(Project)通俗的说一个项目可以就是你开发的一个软件net下一个项目可以表现为多种类型如控制台应用程序Windows应用程序类库(Class Library)Web应用程序Web ServiceWindows控件等等如果经过编译从扩展名来看应用程序都会被编译为exe文件而其余的会被编译为dll文件既然是exe文件就表明它是可以被执行的表现在程序中这些应用程序都有一个主程序入口点即方法Main()而类库Windows控件等则没有这个入口点所以也不能直接执行而仅提供一些功能给其他项目调用

在Visual StudioNet中可以在File菜单中选择new一个Project来创建一个新的项目例如创建控制台应用程序注意在此时Visual Studio除了建立了一个控制台项目之外该项目同时还属于一个解决方案(Solution)这个解决方案有什么用?如果你只需要开发一个Hello World的项目解决方案自然毫无用处但是一个稍微复杂一点的软件都需要很多模块来组成为了体现彼此之间的层次关系利于程序的复用往往需要多个项目每个项目实现不同的功能最后将这些项目组合起来就形成了一个完整的解决方案形象地说解决方案就是一个容器在这个容器里分成好多层好多格用来存放不同的项目一个解决方案与项目是大于等于的关系建立解决方案后会建立一个扩展名为sln的文件

在解决方案里添加项目不能再用new的方法而是要在File菜单中选择Add Project添加的项目可以是新项目也可以是已经存在的项目

程序集叫Assembly学术的概念我不想提通俗的角度来说一个项目也就是一个程序集从设计的角度来说也可以看成是一个完整的模块(Module)或者称为是包(Package)因此一个程序集也可以体现为一个dll文件或者exe文件怎样划分程序集也是大有文章的不过初学者暂时不用考虑它

命名空间(namespace)是在C++里面就有的概念引入它主要是为了避免一个项目中可能会存在的相同对象名的沖突这个命名空间的定义没有特殊的要求不过基本上来说为了保证其唯一性最好是用uri的格式例如BruceZhangcom这个命名空间有点像我们姓名中的姓然后每个对象的名字则是姓名中的名如果有重复再国外的命名中还可以加上middle name那么名都为勇的由于姓氏不同也就分开了或者叫张勇或者叫赵勇当然人的姓氏重复者居多所以我们为命名空间取名时尽可能的复杂一点 有许多初学者常常把一个项目就理解为一个命名空间其实这两者没有绝对的联系在项目里我们也可以定义很多不相同的命名空间但为了用户便于使用最好在一个项目中其命名空间最好是一体的层次结构在Visual Studio里我们可以在项目中新建一个文件夹默认情况下该文件夹下对象的命名空间应该是项目的命名空间文件夹名当然我们也可以在namespace中修改它

命名空间和程序集名都可以在Visual Studio中设置用鼠标右键单击项目名就可以弹出如下对话框

在图中Assembly Name就是程序集名如果经过编译则为该项目的文件名而Default Namespace则为默认的命名空间在开发软件时我们要养成良好的习惯在建立新项目后就将这些属性设置好一旦设置好了Default Namespace则以后新建的对象其命名空间即为该设定的值至于程序集名如果是dll文件建议其名最好与Default Namespace一致

实例演练

(一)创建控制台应用程序Hello World!

打开Visual StudioNet选择File菜单的new选择Project

选择Visual C# Projects中的Console Application如图所示

在Location中定位你要保存的项目的路径而名字则为FirstExample该名字此时既是解决方案的名字同时也是该项目的名字

用鼠标右键单击项目名在弹出的对话框中将Assembly Name命名为HelloWorld将Default Namespace命名为BruceZhangcomFirstExample

此时Visual Studio中已经建立了一个文件其名为Classcs(如果是Visual Studio 则默认为Programcs)修改该文件的文件名为HelloWorldcs同时修改文件中的namespace和类名如下

namespace BruceZhangcomFirstExample

{

/// <summary>

/// Summary description for Class

/// </summary>

class HelloWorld

{

/// <summary>

/// The main entry point for the application

/// </summary>

[STAThread]

static void Main(string[] args)

{

//

// TODO: Add code to start application here

//

}

}

}

注意在HelloWorldcs中有一个Main()方法这是因为我们建立的是控制台应用程序在Main()方法中添加如下代码

ConsoleWriteLine(Hello World!);

ConsoleRead();

这里的Console是一个能对控制台进行操作的类

运行

检查保存项目的路径文件夹FirstExample/bin/debug已经存在了一个HelloWorldexe文件

(二)为解决方案添加一个新项目

File菜单中选择Add Project添加New Project在对话框中选择Class Library名字为Printer至于保存路径可以放在之前建立的FirstExample文件夹下

在Visual Studio右侧可以看到现在有两个项目了仍然修改新项目的名称和默认命名空间名均为BruceZhangcomPrinter

将默认建立的Classcs改名为MessagePrintercs同时修改其代码为

namespace BruceZhangcomPrinter

{

/// <summary>

/// Summary description for Class

/// </summary>

public class MessagePrinter

{

public MessagePrinter()

{

//

// TODO: Add constructor logic here

//

}

public static void Print(string msg)

{

ConsoleWriteLine(msg);

}

}

}

在MessagePrinter类中我们注意到并没有Main()方法因为它不是应用程序新增加的Print()方法能够接收一个字符串然后在控制台中显示出来

编译Printer项目鼠标右键单击该项目名在菜单中选择Build成功编译后找到文件夹Printer/bin/debug可以发现有文件BruceZhangcomPrinterdll这就是最后形成的程序集文件

关联这两个项目我们希望是在FirstExample项目中用到Printer项目的Print()方法前提是需要在FirstExample项目中添加对Printer项目的引用右键单击FirstExample项目的Reference选择Add Reference在对话框中选择Project标签找到该项目并选中最后如图所示

现在就可以在FirstExample项目中使用MessagePrinter了首先在命名空间中添加对它的使用(Using)然后再Main()方法中调用它最后代码如下

using System;

using BruceZhangcomPrinter;

namespace BruceZhangcomFirstExample

{

/// <summary>

/// Summary description for Class

/// </summary>

class HelloWorld

{

/// <summary>

/// The main entry point for the application

/// </summary>

[STAThread]

static void Main(string[] args)

{

MessagePrinterPrint(Hello World!);

ConsoleRead();

}

}

}

运行结果与前一个例子一样

在这个例子中解决方案中就包含了两个项目一个是控制台应用程序一个是类库类库提供一些基本的功能如例子中的Print()方法我们常常把一些共用的方法放到类库中这样其他的应用程序就可以去调用它例如本例的控制台应用程序如果新建的Windows应用程序也需要这个功能就可以直接引用MessagePrinter的Print()方法而不必重复去实现

               

上一篇:用C#编写获取远程IP,MAC的方法

下一篇:叩开C#之门系列之C#与面向对象编程语言