什么时候使用C#类库(.dll)合适?

什么时候使用C#类库(.dll)合适?,c#,class,dll,class-library,C#,Class,Dll,Class Library,我是一个从未真正使用过.dll文件的程序员。 当然,当我需要第三方软件时,例如图形库、帮助我创建图形的库等。我会将引用/ddl文件添加到我的程序中,并在代码中使用它们 另外,似乎可以将.dll用于许多不同的事情,因此我希望本主题集中在C#上 现在我正在开发一个清理库(?(我认为这是正确的术语),它将充满相关的方法,可以以各种不同的方式清理变量 我想知道的是: 这样做是否有好处: 1)将方法写入类库->编译/构建它->添加库作为对程序的引用-这需要清理一些变量 或者,如果我在哪里: 2)在程序中创

我是一个从未真正使用过.dll文件的程序员。 当然,当我需要第三方软件时,例如图形库、帮助我创建图形的库等。我会将引用/ddl文件添加到我的程序中,并在代码中使用它们

另外,似乎可以将.dll用于许多不同的事情,因此我希望本主题集中在C#上

现在我正在开发一个清理库(?(我认为这是正确的术语),它将充满相关的方法,可以以各种不同的方式清理变量

我想知道的是:

这样做是否有好处:

1)将方法写入类库->编译/构建它->添加库作为对程序的引用-这需要清理一些变量

或者,如果我在哪里:

2)在程序中创建一个新的SanitizeClass->添加所有sanitize方法->在程序中需要清理变量的不同类中调用SanitizeClass中的方法

一般来说,我还想知道使用编译类库的优势是什么。 我在考虑速度,安全,所有这些


有人能告诉我吗?:)

首先想到的是可重用性。此清理库是否会在您当前使用的应用程序之外使用?如果是,那么您就不想在将来引用exe,因为您想构建一个DLL文件(甚至可能是强名称和GAC文件),然后在将来引用它。

关键问题是:多个应用程序使用该类型有意义吗?如果是这样,它应该在类库中。如果不是,您可能仍然希望为了分离而将其放入类库中(例如,在n层解决方案中,每层有一个程序集),但您可以将其放入应用程序中

如果您的清理是通用的,那么将其放入类库肯定是正确的做法


我知道有些人几乎不在可执行应用程序中编写代码,几乎把所有东西都放在类库中,所以应用程序基本上只包装类库。我自己也不想走那么远……

当您想在多个程序之间共享代码时,使用库是很有用的

如果您认为您将需要您的类来清理多个程序中的数据,那么最好将它们放在库中


将应用程序的层放在不同的库中也是一个好主意(检查n层体系结构)

附加的程序集将增加少量的加载时间和内存开销,但在其他方面不会影响性能

只有当您需要不同的代码访问安全性(CAS)并使用CAS时,安全性才会有所不同

通常有三个原因:

  • 它使事情变得更简单。将所有内容放在一个组件中变得越来越笨拙(这可能包括组织/团队问题)

  • 重复使用

  • 您需要单独的程序集。例如,在不同的程序集中有接口和实现,以允许卸载AppDomain(例如插件)


  • 我认为最简单的方法是将SanitizeLibrary项目作为库类项目添加到解决方案中,并在应用程序中引用该项目。如果您觉得它有用,您可以从当前项目中提取库,并在其他项目中将其作为dll引用。

    如果您要在不同的应用程序中重用此代码-即:这将是某种共享库-然后将其编译为dll


    reg performance,请注意,针对外部程序集执行的任何代码总是比在同一程序集中执行代码慢一点

    什么是类库?

    我们可以在所有.Net应用程序(C#.Net、Asp.Net、Asp.Net MVC)中创建类文件

    在Java中,它被称为包

    在.Net中,我们称之为DLL(动态链接库)

    如果要在应用程序中创建类,则只能在此应用程序中使用此类,而不能在其他应用程序中使用此类

    如果创建类库,则可以在所有应用程序中使用它

    当您必须创建和使用类库时?

    当我们在不同的应用程序中编写相同的代码时,我们可以创建类库并在所有应用程序中使用它

    例如:

    如果在多个应用程序中有“导出excel”选项,则可以在类库中编写导出代码,并在多个应用程序中使用它

    实时示例:

    就像房间里的垃圾箱,只有房间成员才能进入


    班级图书馆就像普通地方的垃圾箱(大学、火车站)任何人都可以访问和使用它。

    但是使用类库而不是将其直接放入应用程序中有没有任何速度优势或损失?是的-在外部程序集上执行的任何代码总是比在同一程序集上执行的代码慢。你有关于这方面的数据吗?我倾向于认为速度上的损失只是轻微的。但话说回来,我也没有任何数据支持这一说法。我也想看看证据。我希望在JITting之后,在许多(但可能不是所有)情况下,不会有任何区别。我当然不会期望有显著的不同。乔恩+1(我肯定我是第一个)。我想证明在引用程序集中执行代码将比在条目程序集中执行代码慢。“将总是稍微慢一点”:请展开。JIT(和ngen)将允许跨组件进行内联和其他优化。