【问题标题】:why we give reference to the other projects?为什么我们要参考其他项目?
【发布时间】:2012-07-08 18:38:47
【问题描述】:

查看包含多个项目的解决方案时:

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;

【问题讨论】:

  • 一个问号就可以了:)

标签: c# visual-studio-2010 inheritance reference namespaces


【解决方案1】:

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

它们是两个完全不同的概念。

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

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

2) 在我们使用 Visual Studio IDE 提供参考之后,为什么我们必须将项目添加到命名空间系统???

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

了解程序集和命名空间之间的区别非常重要。尽管它们经常命名相似(Foo.Bar.dll 通常在命名空间 Foo.Bar 中提供类型),但它们在概念上是不同的。

【讨论】:

  • 亲爱的乔恩;你对第一个问题的回答让我想起了头文件的概念。例如 #include .... 在 C++ 中。但我并不清楚 Cristal 是否真的与头文件有关,或者与添加参考有某种联系或相似之处。我认为如果我继承该类,那么我可以在我的项目中使用并可以创建对象。对于您对第二个问题的回答,我不能将我的类更改为库,并在同一解决方案中的另一个项目中引用它吗?如果是这样,为什么我使用参考?谢谢大家。
  • @modestandcutegirl:如果编译器不知道该类的定义位置,您将如何从该类继承?您不能将类更改为库 - 它们是完全不同的概念。类库是一种程序集;类是程序集的成员
【解决方案2】:

项目是一个自给自足的可编译单元,必须编译成有效的程序集文件。这就是为什么您需要明确指定每个项目需要哪些引用,以便能够与其他项目单独进行编译。

在项目级别上没有任何继承概念。

【讨论】:

  • 谢谢。所以由于它们是不同的项目,我需要在编译时引用它们。
【解决方案3】:

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

这个问题毫无意义。继承与项目引用有什么关系。能详细点吗?

2) 在我们使用Visual Studio IDE 提供参考之后,为什么我们必须将项目添加到命名空间系统?

因为在引用另一个程序集的程序集(当您添加对项目的引用时会发生这种情况)和知道在哪里找到 语言之间存在固有的差异> 当您在文件中使用 using 指令时会发生这种情况。

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

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

MyCodebase.MyAssembly.MyNamespace.MyOtherNamespace.SomethingElse.TextBox

相反,您包含整个命名空间的 using 指令,因此您只需编写以下代码:

TextBox

【讨论】:

  • 谢谢大家。我从你所有的著作中学到了很多。为第一个问题解释更多。假设我们有一个使用多个项目的解决方案,并且我参考了另一个项目,以便我可以参考已给出参考的项目。这样我也可以接触到另一个项目。但是为什么这样,而不是通过继承或创建一个类库,我继承并在另一个项目中使用 dll。由于我是新手,我可能会错过这些概念,但我根据我所拥有的肤浅知识提出了我的问题。
  • @modestandcutegirl:在这种情况下,我仍然觉得您不理解“继承”一词。在您的项目中,您将引用另一个程序集以使用该程序集中的代码。此引用可以是对当前解决方案中的项目的引用。它也可以是对 DLL 文件的引用。我通常更喜欢前者,因为它更好地利用了 IDE 的功能。但这可能不是你要问的。您能否在有关您如何引用代码的问题中给出一个更完整的示例,并举例说明您提出的替代方案?
猜你喜欢
  • 2021-04-01
  • 1970-01-01
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多