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

  初学者很容易把这些概念搞混淆。先说说项目(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中设置。用鼠标右键单击项目名,就可以弹出如下对话框:

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

  实例演练:

  (一)创建控制台应用程序“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文件。

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

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

  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;

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()方法,而不必重复去实现。

时间: 2024-11-03 17:11:57

叩开C#之门系列之几个重要名词的相关文章

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

编程|对象 C#是纯粹的面向对象编程语言,它真正体现了"一切皆为对象"的精神.在C#中,即使是最基本的数据类型,如int,double,bool类型,都属于System.Object类型.此外,使用C#编程,不会存在与游离于对象之外的属于过程的东西.因此,学习C#,就必须具有面向对象思想,不明白所谓的"面向对象思想",就不可能掌握C#的精髓,而对于C#的理解,就只能仅限于语言特色的表面了. 很多讲解面向对象思想的书籍和文章喜欢将面向对象与面向过程相比较,然而对于学习

#答题送书# 技术之瞳——叩开阿里之门之在线笔试

一个月的答题时间匆匆已过,这期间大家回贴积极踊跃.优质回复很多,在选取获奖用户时小编犯了难,经过讨论现将获奖名额增至10位,让好书能够传递给更多的人! 获奖用户 hachman 小掌 阿狸master clione linxi 杨晓兵 卡来宝 阿个力 poapa 东风玖哥 答案 1.C 2.ACD 3.B 4.D 5.BD 6.D 7.D 8.B 9.B 10.C 领奖方式 请获奖用户将收件信息以及登录截图发送至邮箱wangy@phei.com.cn中,我们会及时寄出奖品图书.(截图如下) 活动

大话存储系列0——LUN 与 LVM 名词解释

在看这篇文章之前,请先参考我的博客:http://blog.csdn.net/cymm_liu/article/details/8656154  中的第4部分:逻辑卷管理,摘录如下: 逻辑卷一旦创建,之后就无法改变,如果开始的时候划分了100G的逻辑盘,但是两年之后,空间使用快满了,但是又不能放到别的磁盘(逻辑盘),因为受上层文件系统的限制,一个文件不可能跨越多个分区来存放.更别提多个磁盘了.如果一个文件超过了这100G,那就死路一条了.. 所以必须有一种机制,在一个逻辑磁盘空间满了的时候,可以

创业开局六绝招助创业者迎来开门红

别以为自己当老板很容易!有人创业第一年找不到半个客户,100万元创业资金一下子就花光:有人自行创业后,没有大公司的蔽荫,"感觉自己好像流浪狗".更多创业者已经意识到,创业先要创势,创造出了良好的开局,形成了自己的气势,创业才有可能得以顺利进行下去. <左传.曹刿论战>有云:一鼓作气,再而衰,三而竭.运兵之道是如此,创业开办企业也同样讲究这个道理.近年来,很多创业成功学的研究者都提出,开局对创业者非常重要.一个屡战屡败的人,也许终有一天能够看到成功的希望,但是相对而言,他的历

用后期创造你的魔法特效

  首先我想告诉大家的是想法比技术重要.技术提高相对容易,ps常用命令就那么多,花时间总能掌握.大家关注的应该是为什么这么做和做的方法,而不是具体的数据. 一:前期拍摄 一直就很喜欢看玄幻题材的小说和电影,最爱玩的游戏就是"博德之门"系列.这就是我拍这组片子的灵感和基础.主题确定后那么下面一切工作都应该围绕着这个主题来进行.场地是"金陵十三钗"的拍摄基地 ,古朴做旧的教堂很适合这个主题.模特我选择了经常合作的妹子小安,冷酷的眼神完全达到了我要求.一般的妹子很难表现出

用Photoshop后期创造你的魔法特效

  首先我想告诉大家的是想法比技术重要.技术提高相对容易,ps常用命令就那么多,花时间总能掌握.大家关注的应该是为什么这么做和做的方法,而不是具体的数据. 一:前期拍摄 一直就很喜欢看玄幻题材的小说和电影,最爱玩的游戏就是"博德之门"系列.这就是我拍这组片子的灵感和基础.主题确定后那么下面一切工作都应该围绕着这个主题来进行.场地是"金陵十三钗"的拍摄基地 ,古朴做旧的教堂很适合这个主题.模特我选择了经常合作的妹子小安,冷酷的眼神完全达到了我要求.一般的妹子很难表现出

欧洲抄底危中之机:不盲目 不贪便宜 门当户对

到欧洲去,在欧洲的危急时刻. 2012年2月3日,国家电网3.87亿欧元收购葡萄牙国家能源网公司25%股份;1月31日,三一重工公告其控股子公司收购世界混凝土工程机械第一品牌普茨迈斯特公司;1月10日山东重工3.74亿欧元买下豪华游艇生产商意大利法拉帝集团75%股权-- 一桩桩大并购热闹地开年,不过是中国企业并购欧洲热的延续.根据普华永道2012年1月发布的报告,2011年中国大陆企业在欧洲地区完成并购交易44件,较前一年25件上升76%.中国企业对欧直接投资达到67亿美元,较上年增长2倍. 希

徐步云:渠道为王

"至少在安全门这个行业,我们的销售渠道是最完善最健全的,无人可及!"对于自己精心打造的销售渠道,徐步云霸气十足. 本刊记者 王文正 2010年4月的一天,步阳集团董事长徐步云从杭州赶往济南,去主持公司的山东省年度经销商大会.由于步阳的经销商遍及全国各地,人数众多,他不得不将经销商大会放在各省市分别召开,18场经销商大会足足开了一个多月时间. 徐献勇是郑州办事处的负责人,他从永康去郑州的途中,与永康一家大型门业制造商老总邂逅.这名老总拍了拍他的肩膀,半开玩笑半当真地说:"全国优

《无冬之夜》网游采用多人联机模式类似暗黑

之前,曾有消息称,龙与地下城OL.博德之门系列.无冬之夜系列的开发商Cryptic Studio可能会开发无冬之夜的网游版,而近日,又有消息爆出,无冬之夜网游版名为<Neverwinter>,隶属于龙与地下城系列,并且,这款游戏并不是走MMO形式,而是多人联机RPG模式,游戏很可能更偏向于暗黑破坏神类型. 在年初就不断有流言指出,Cryptic Studio即将推出一款龙与地下城系列的MMO,与现在Turbine的DDO分庭抗礼,而这款游戏将会是<Neverwinter>,笔者只能