解决方案、项目、程序集、命名空间

《叩开C#的家》系列有

前言:表弟想只要学编程,我推荐他学习.Net和C#。这等同推荐不打困难,我也负上了指导的任务。我又出差在他,直接辅导是格外了,通过邮件也太难为。推荐了几乎本书,可惜他太菜了,总有管从下手的痛感。推及他人,在初学C#时,是否为生这般的发也?所以,就生了这个系列文章。表弟是自我将他携带计算机行业的,当初啊都未掌握,我早就打开计算机机箱,指点他哪里是硬盘、哪里是内存,是CPU,现在于电脑硬件他已经可以做我师父。希望学软件编程也能够这样。

平等、解决方案、项目、程序集、命名空间
新家很易把这些概念将混淆。先说说路(Project),通俗的说,一个档次可以尽管是你付出之一个软件。在.Net下,一个品类好展现吧多种类型,如控制台应用程序,Windows应用程序,类库(Class
Library),Web应用程序,Web
Service,Windows控件等等。如果经过编译,从扩大名来拘禁,应用程序都见面让编译为.exe文件,而其他的见面为编译为.dll文件。既然是.exe文件,就表明它是好给执行之,表现于次中,这些应用程序都出一个主程序入口点,即方法Main()。而类库,Windows控件等,则没这入口点,所以啊非克一直执行,而仅仅提供一些力量,给任何类型调用。

每当Visual
Studio.Net中,可以于“File”菜单中,选择“new”一个“Project”,来创造一个新的类型。例如创建控制台应用程序。注意在此刻,Visual
Studio除了成立了一个控制台项目之外,该型还要还属于一个解决方案(Solution)。这个解决方案来啊用?如果你就需要支出一个Hello
World的种,解决方案自然不用用处。但是,一个稍稍复杂一点底软件,都待多模块来组合,为了体现彼此之间的层系关系,利于程序的复用,往往用多独品类,每个品种落实不同之力量,最后用这些项目结合起来,就形成了一个完好无损的解决方案。形象地游说,解决方案虽是一个容器,在是容器里,分成多交汇,好多格,用来存放在不同之花色。一个化解方案及品类是超乎等于的涉嫌。建立解决方案后,会确立一个恢弘名为.sln的文书。

于解决方案里上加项目,不克再就此“new”的法,而是一旦当“File”菜单中,选择“Add
Project”。添加的类型,可以是新路,也足以是已在的项目。

程序集叫Assembly。学术的定义我无思量取,通俗的角度来说,一个类型也就是一个先后集。从筹划之角度来说,也可视作是一个完好无缺的模块(Module),或者叫是保证(Package)。因此,一个次集为足以体现为一个dll文件,或者exe文件。怎样划分程序集为是满目的,不过新家暂时不要考虑它。

命名空间(namespace)是以C++里面纵使一些概念。引入其,主要是为避免一个品种蒙,可能会见有的同样对象名之扑。这个命名空间的定义,没有非常之渴求。不过大多来说,为了确保其唯一性,最好是为此uri的格式,例如BruceZhang.com。这个命名空间小像咱姓名中之姓氏,然后每个对象的名字则是真名中之叫。如果发生双重,再国外的命名中,还好长middle
name。那么名都为勇的,由于姓氏不同也就是分手了,或者叫张勇,或者让赵勇。当然人的姓重复者居多,所以我们啊命名空间取名时,尽可能的纷繁一点。

产生诸多初家,常常把一个档次就清楚呢一个命名空间。其实就二者没有绝对的沟通,在档次里我们啊可定义很多不相同的命名空间。但以用户便于使用,最好以一个项目中,其取名空间不过是一环扣一环的层次结构。在Visual
Studio里,我们好于档次遭到初打一个文件夹,默认情况下,该公文夹下对象的命名空间,应该是“项目之命名空间.文件夹名”。当然,我们为堪当namespace中修改其。

命名空间与程序集名,都得以于Visual
Studio中设置。用鼠标右键单击项目名为,就好弹出如下对话框:
 

图片 1

每当祈求被,Assembly
Name就是次集名,如果由此编译,则为该类型的文书称。而Default
Namespace则也默认的命名空间。在开发软件时,我们设养成良好的惯,在成立新类型后,就用这些性设置好。一旦设置好了Default
Namespace,则以后新建的目标,其命名空间就为该设定的价值。至于程序集名,如果是dll文件,建议其称为极好及Default
Namespace一致。

实例演练:
(一)创建控制台应用程序“Hello World!”
1、打开Visual Studio.Net,选择“File”菜单的“new”,选择“Project”;
2、选择Visual C# Projects中的“Console Application”,如图所示:
 

图片 2

每当Location中,定位你若封存之类别之门路,而名则也“FirstExample”。该名此时既是是化解方案的讳,同时也是拖欠类型的名字。
3、用鼠标右键单击项目名为,在弹出的对话框中,将Assembly
Name命名为HelloWorld,将Default
Namespace命名为:BruceZhang.com.FirstExample。
4、此时Visual Studio中一度确立了一个文件,其名为Class1.cs(如果是Visual
Studio
2005,则默认为Program.cs);修改该文件的文件称也HelloWorld.cs,同时修改文件中的namespace,和类名,如下:
namespace BruceZhang.com.FirstExample
{
 /// <summary>
 /// Summary description for Class1.
 /// </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
   //
  }
 }
}
5、注意在HelloWorld.cs中,有一个Main()方法。这是盖我们树立的凡控制台应用程序。在Main()方法被上加如下代码:
Console.WriteLine(“Hello World!”);
Console.Read();
此间的Console是一个克针对控制高进行操作的好像。
6、运行。
反省保存项目之路子文件夹FirstExample/bin/debug,已经有了一个HelloWorld.exe文件。

(二)为缓解方案添加一个新类型
1、在“File”菜单中,选择“Add Project”,添加“New
Project”。在对话框中甄选“Class
Library”,名字也Printer。至于保存路径,可以置身之前起的FirstExample文件夹下:

图片 3

2、在Visual
Studio右侧,可以观看本生星星点点只品种了。仍然修改新路之称号以及默认命名空间名,均为BruceZhang.com.Printer。
3、将默认建立之Class1.cs化名为MessagePrinter.cs,同时修改其代码为:
namespace BruceZhang.com.Printer
{
 /// <summary>
 /// Summary description for Class1.
 /// </summary>
 public class MessagePrinter
 {
  public MessagePrinter()
  {
   //
   // TODO: Add constructor logic here
   //
  }

  public static void Print(string msg)
  {
   Console.WriteLine(msg);
  }
 }
}
于MessagePrinter类中,我们注意到连无Main()方法,因为其不是应用程序。新添的Print()方法,能够接受一个字符串,然后以控制台中显得出。
4、编译Printer项目。鼠标右键单击该型名为,在菜单中选择“Build”。成功编译后,找到文件夹Printer/bin/debug,可以窥见产生文件BruceZhang.com.Printer.dll,这即是终极形成的主次集文件。
5、关联这有限只项目。我们要是当FirstExample项目中之所以到Printer项目之Print()方法,前提是要在FirstExample项目面临补充加对Printer项目之援。右键单击FirstExample项目之“Reference”,选择“Add
Reference”,在对话框中精选“Project”标签,找到该品种并入选,最后如图所示:

图片 4

 
6、现在虽得以FirstExample项目受到使MessagePrinter了。首先,在命名空间被上加对她的使(Using),然后还Main()方法吃调用它,最后代码如下:
using System;
using BruceZhang.com.Printer;

namespace BruceZhang.com.FirstExample
{
 /// <summary>
 /// Summary description for Class1.
 /// </summary>
 class HelloWorld
 {
  /// <summary>
  /// The main entry point for the application.
  /// </summary>
  [STAThread]
  static void Main(string[] args)
  {
   MessagePrinter.Print(“Hello World!”);
   Console.Read();
  }
 }
}
7、运行。结果以及前方一个例子一样。

每当是例子中,解决方案受到即包含了少数只项目,一个凡控制台应用程序,一个是类库。类库提供一些骨干的力量,如例子中之Print()方法。我们常常把部分同步用底法门,放到类库中。这样任何的应用程序就得错过调整用它们。例如本例的控制台应用程序。如果新建的Windows应用程序,也欲之效果,就可以直接引用MessagePrinter的Print()方法,而不必再度去落实。