2012-07-09 47 views
1

查看多个项目的解决方案时:我们为什么要参考其他项目?

1)为什么我们要添加对其他项目的引用?我们不能只使用继承吗?

2)使用Visual Studio添加参考后,为什么我们必须将项目添加到命名空间系统?例如:using myReferenceProject;我认为IDE会这样做。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using myReferenceProject; 
using System.Data.SqlClient; 
using System.Data; 
+4

一个问号会做得很好:) – 2012-07-09 11:05:51

回答

9

1)为什么我们给参考其他项目?不能我们只使用继承?

他们两个完全不同的概念。

添加对另一个程序集的引用基本上是这样说的:“我希望能够使用这些代码中的一部分,请让编译器知道该代码存在,并且可选地将其复制到输出目录中,以便它在执行时出现时间也一样。“

如果编译器不知道这种类型,您会如何使用继承来创建从某种类型派生的类?

2)在我们通过使用visual studio IDE给参考之后,为什么我们必须将项目添加到命名空间系统?

因为程序集和名称空间也是不同的概念。 A using指令只是对编译器说:“当我在我的代码中提到类型Foo时,请查看这些命名空间以尝试解决它。​​”该类型可能来自您引用的程序集的任意

了解程序集和名称空间之间的区别非常重要。即使他们经常命名相似(Foo.Bar.dll经常提供命名空间Foo.Bar类型)他们概念不同。

+0

亲爱的乔恩;你对第一个问题的回答让我想起了头文件的概念。例如#include ....在C++中。但没有让我的头脑清楚,如果它真的与头文件相关或有某些连接或类似的添加引用。我认为,如果我继承这个类,那么我可以在我的项目中使用,并可以创建对象。对于你给第二个问题的答案,我不能将我的课程更改为一个图书馆,并且我将它引用到同一解决方案中的其他项目中?如果是的话为什么我使用参考?感谢大家。 – 2012-07-09 12:34:14

+0

@modestandcutegirl:如果没有编译器知道类定义在哪里,你将如何从类继承?你*不能*把一个类改成一个库 - 它们是完全不同的概念。一个类库是一种程序集;一个类是程序集的*成员*。 – 2012-07-09 12:42:52

0

该项目是自sufficent编译单元,即有编译到有效的汇编文件。这就是为什么你需要明确指定哪些参考文献项目需要,以便能够分别编译从其他人。

在项目层面没有任何继承概念。

+0

谢谢。因为它们是我需要引用它们进行编译的不同项目。 – 2012-07-09 12:36:51

0

1)为什么我们要参考其他项目?不能我们只使用继承?

这个问题没有意义。继承与项目引用有什么关系。你能详细说明吗?

2)在我们通过使用visual studio IDE给出引用后,为什么我们必须将该项目添加到命名空间系统中?

因为有知道在哪里可以找到一个这是发生在你什么组件引用另一个组件(也就是当您添加到项目的引用会发生什么)和语言之间的固有差异在文件中使用using指令。

例如,假设您在项目中创建了一个名为TextBox的类。然后在另一个文件中,您想使用该类。该语言如何知道您是指自定义TextBox类还是另一个引用程序集?该问题的答案是名称空间。通过用名称空间完全限定类名,可以告诉编译器您正在使用哪个类。

using指令是一种为每个文件指定命名空间一次而不是每次使用类(或该命名空间中的其他类)的方法。所以,如果你需要一个单一的文件中引用您的TextBox类多次,你不希望有写这个时间:

MyCodebase.MyAssembly.MyNamespace.MyOtherNamespace.SomethingElse.TextBox 

相反,包括using指令,整个命名空间,所以你只需要写这个:

TextBox 
+0

谢谢大家。我从你的所有着作中学到很多东西。为第一个问题来解释更多。可以说我们有一个解决方案,它使用多于一个项目,并且我引用另一个项目,以便我可以参考已经给出参考的项目。这样我也可以到达其他项目。但为什么这样,而不是通过继承,或通过建立一个在其他项目中使用dll的类库来实现。因为即时新我可能会错过这些概念,但我根据我所拥有的浅层知识问了我的问题。 – 2012-07-09 12:49:03

+0

@modestandcutegirl:在这种情况下,我仍然觉得你并不理解术语“继承”。在您的项目中,您将引用另一个程序集以便使用该程序集中的代码。此参考可以是对当前解决方案中项目的参考。它也可以是对DLL文件的引用。我通常更喜欢前者,因为它更好地利用了IDE的功能。但这可能不是你要求的。你能否在关于如何引用代码的问题中给出一个更完整的例子,或者给出一个你提出的替代方案的例子? – David 2012-07-09 13:44:43