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

《叩开C#的法家》系列之一

一致、解决方案、项目、程序集、命名空间
新家很易把这些概念将混淆。先说说路(Project),通俗的游说,一个型可纵是若开的一个软件。在.Net下,一个类别得以表现呢多种类型,如控制台应用程序,Windows应用程序,类库(Class
Library),Web应用程序,Web
Service,Windows控件等等。如果经过编译,从扩大名来拘禁,应用程序都见面给编译为.exe文件,而任何的会面被编译为.dll文件。既然是.exe文件,就表明其是足以给执行之,表现在次中,这些应用程序都有一个主程序入口点,即方法Main()。而类库,Windows控件等,则无这个入口点,所以呢非能够一直执行,而独提供一些职能,给其他门类调用。

前言:表弟想使效仿编程,我引进外学习.Net和C#。这同样引进不起困难,我倒是承受上了指的天职。我以出差在外,直接辅导是特别了,通过邮件也最好辛苦。推荐了几乎本书,可惜他太菜了,总起无从下手的感觉到。推及他人,在初学C#常常,是否为发出这般的感觉到也?所以,就发生矣这系列文章。表弟是自个儿管他牵计算机行业的,当初啊还非明白,我曾打开计算机机箱,指点他哪是硬盘、哪里是内存,是CPU,现在对电脑硬件他早已可以开我师父。希望学软件编程也能够这么。

于Visual
Studio.Net中,可以当“File”菜单中,选择“new”一个“Project”,来创造一个初的品类。例如创建控制台应用程序。注意在此时,Visual
Studio除了成立了一个控制台项目之外,该类型同时还属于一个化解方案(Solution)。这个解决方案有啊用?如果您不过需要开发一个Hello
World的路,解决方案自然不用用处。但是,一个略带复杂一点底软件,都用多多模块来做,为了体现彼此之间的层系关系,利于程序的复用,往往用多个档次,每个品种实现不同的作用,最后以这些类别做起来,就形成了一个整机的解决方案。形象地说,解决方案便是一个器皿,在这容器里,分成多层,好多格,用来存放在不同之类别。一个解决方案及种类是大于等于的关系。建立解决方案后,会确立一个恢弘名为.sln的文本。

平等、解决方案、项目、程序集、命名空间
乍家很易把这些概念将混淆。先说说路(Project),通俗的游说,一个档好纵是您出之一个软件。在.Net下,一个种类可以呈现呢多种类型,如控制台应用程序,Windows应用程序,类库(Class
Library),Web应用程序,Web
Service,Windows控件等等。如果经过编译,从扩大名来拘禁,应用程序都见面于编译为.exe文件,而另的会晤受编译为.dll文件。既然是.exe文件,就标明她是可以给实践的,表现于程序中,这些应用程序都出一个主程序入口点,即方法Main()。而类库,Windows控件等,则没有是入口点,所以啊不可知直接实施,而止提供有效,给另外类型调用。

当缓解方案里添加路,不能够重复用“new”的措施,而是要于“File”菜单中,选择“Add
Project”。添加的类,可以是初品类,也堪是现已是的档次。

于Visual
Studio.Net中,可以于“File”菜单中,选择“new”一个“Project”,来创造一个新的档次。例如创建控制台应用程序。注意在这,Visual
Studio除了建了一个控制台项目以外,该档同时还属一个解决方案(Solution)。这个解决方案来啊用?如果你一味待支付一个Hello
World的色,解决方案自然不用用处。但是,一个有些复杂一点之软件,都急需过多模块来组成,为了反映彼此之间的层系关系,利于程序的复用,往往要差不多只品种,每个项目实现不同之成效,最后将这些品种结合起来,就形成了一个完整的化解方案。形象地说,解决方案就是是一个容器,在这个容器里,分成多层,好多格,用来存放在不同的型。一个缓解方案与品种是过等于的关联。建立解决方案后,会树立一个恢弘名为.sln的文书。

程序集叫Assembly。学术的定义我未思提,通俗的角度来说,一个路也即是一个程序集。从设计之角度来说,也足以作为是一个总体的模块(Module),或者叫是保(Package)。因此,一个程序集为得以反映为一个dll文件,或者exe文件。怎样划分程序集也是满目的,不过新家暂时不要考虑它。

当解决方案里补充加项目,不克重就此“new”的方法,而是如在“File”菜单中,选择“Add
Project”。添加的项目,可以是新类型,也堪是曾经在的色。

命名空间(namespace)是于C++里面就一些概念。引入其,主要是以避免一个品类遭到,可能会见有的一致对象名之冲突。这个命名空间的定义,没有突出之要求。不过大多来说,为了保其唯一性,最好是因此uri的格式,例如BruceZhang.com。这个命名空间小像我们姓名中之姓氏,然后每个对象的名则是真名中的叫做。如果发再度,再国外的命名中,还得长middle
name。那么名都为勇的,由于姓氏不同呢尽管分手了,或者为张勇,或者为赵勇。当然人的姓氏重复者居多,所以我们为命名空间取名时,尽可能的扑朔迷离一点。

程序集叫Assembly。学术的定义我弗思量取,通俗的角度来说,一个类型为尽管是一个顺序集。从筹划的角度来说,也得当是一个一体化的模块(Module),或者称是保险(Package)。因此,一个顺序集为足以体现吗一个dll文件,或者exe文件。怎样划分程序集为是林立的,不过新家暂时不用考虑她。

生成百上千初家,常常把一个种即掌握也一个命名空间。其实就二者没有断的关系,在类型里我们啊得以定义很多非雷同的命名空间。但为了用户便于使用,最好当一个品类遭到,其取名空间不过是环环相扣的层次结构。在Visual
Studio里,我们可以在品种蒙初修建一个文件夹,默认情况下,该公文夹下对象的命名空间,应该是“项目之命名空间.文件夹名”。当然,我们啊得以namespace中修改它。

取名空间(namespace)是在C++里面纵使有的概念。引入其,主要是为着避免一个类蒙,可能会见存在的一律对象名之闯。这个命名空间的概念,没有例外的求。不过大多来说,为了保证其唯一性,最好是用uri的格式,例如BruceZhang.com。这个命名空间小像咱姓名中的姓,然后每个对象的名字则是姓名被之称。如果产生再次,再国外的命名中,还可以增长middle
name。那么名都为勇的,由于姓氏不同啊就是分开了,或者让张勇,或者让赵勇。当然人的姓重复者居多,所以我们吧命名空间取名时,尽可能的错综复杂一点。

取名空间与程序集名,都可以当Visual
Studio中安。用鼠标右键单击项目名为,就好弹出如下对话框:
 

发过多新家,常常将一个类别就算知吧一个命名空间。其实这二者没有断然的关联,在项目里我们呢足以定义很多休同等之命名空间。但为用户便于使用,最好于一个类受到,其取名空间不过是严密的层次结构。在Visual
Studio里,我们得以路面临新盖一个文本夹,默认情况下,该文件夹下对象的命名空间,应该是“项目之命名空间.文件夹名”。当然,我们也可以namespace中改它。

必威 1

取名空间及顺序集名,都得以Visual
Studio中安。用鼠标右键单击项目名为,就足以弹出如下对话框:
 

于觊觎中,Assembly
Name就是先后集名,如果通过编译,则也该项目之文本称。而Default
Namespace则也默认的命名空间。在开发软件时,我们只要养成良好的习惯,在树新类型后,就以这些性设置好。一旦设置好了Default
Namespace,则以后新建的靶子,其取名空间就为该设定的价。至于程序集名,如果是dll文件,建议该称最好与Default
Namespace一致。

必威 2

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

以觊觎备受,Assembly
Name就是程序集名,如果通过编译,则为该型之文书称。而Default
Namespace则为默认的命名空间。在开发软件时,我们要养成良好的惯,在确立新类型后,就将这些性设置好。一旦设置好了Default
Namespace,则以后新建的靶子,其取名空间就为该设定的值。至于程序集名,如果是dll文件,建议该称为极好及Default
Namespace一致。

必威 3

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

以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文件。

必威 4

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

在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文件。

必威 5

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

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
   //
  }

必威 6

  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”标签,找到该型并入选,最后如图所示:

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
   //
  }

必威 7

  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”标签,找到该种并当选,最后如图所示:

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

必威 8

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、运行。结果及眼前一个例证一样。

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

以斯事例中,解决方案面临虽带有了简单单类别,一个凡是控制台应用程序,一个凡类库。类库提供一些主干的作用,如例子中的Print()方法。我们常把有些齐声用的艺术,放到类库中。这样任何的应用程序就可错过调整用其。例如本例的控制台应用程序。如果新建的Windows应用程序,也要是效果,就好一直引用MessagePrinter的Print()方法,而毋庸再度去实现。

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()方法,而毋庸再去贯彻。

转自: http://www.cnblogs.com/wayfarer/archive/2006/04/07/369371.html

Leave a Comment.