C# 如何在C中从单独文件夹中的文件导入名称空间#
当定义此类的文件位于另一个文件夹中时,如何将扩展方法(见下文)引入当前命名空间的作用域 当C# 如何在C中从单独文件夹中的文件导入名称空间#,c#,namespaces,using,C#,Namespaces,Using,当定义此类的文件位于另一个文件夹中时,如何将扩展方法(见下文)引入当前命名空间的作用域 当StringHandler.cs位于Product文件夹中时,我可以使用实用程序包含位于Product.cs中,但是当它位于项目文件夹旁边的单独文件夹中时(在实用程序文件夹中),我不知道如何包含它。有人能解释一下在这种情况下我如何使用using关键字吗?例如,using在我的文件系统上真正指向哪里(我需要指定相对于我的csproj文件或我的CallCenter.sln文件的using目录吗?) String
StringHandler.cs
位于Product
文件夹中时,我可以使用实用程序包含代码>位于Product.cs
中,但是当它位于项目
文件夹旁边的单独文件夹中时(在实用程序
文件夹中),我不知道如何包含它。有人能解释一下在这种情况下我如何使用using关键字吗?例如,using
在我的文件系统上真正指向哪里(我需要指定相对于我的csproj
文件或我的CallCenter.sln
文件的using目录吗?)
StringHandler.cs
namespace Utilities
{
public static class StringHandler
{
public static string InsertSpaces(this string source)
{
string result = string.Empty;
if (!string.IsNullOrWhiteSpace(source))
{
foreach (char letter in source)
{
if (char.IsUpper(letter))
{
result = result.Trim();
result += " ";
}
result += letter;
}
}
return result.Trim();
}
}
}
编译期间,.cs
文件所在的文件夹没有意义。using
语句只允许找到特定命名空间中的类型。要能够使用扩展方法,请确保:
- 包含名称空间(
使用实用程序;
)
- 文件(
StringHandler.cs
)包含在您的项目或当前项目引用的其他项目中
当定义此类的文件位于另一个文件夹中时,如何将扩展方法(见下文)引入当前命名空间的作用域
定义文件的位置与文件夹无关。按照惯例,磁盘上的文件夹结构模仿名称空间,但不一定非得如此。使用
的会将类型“带”到命名空间中。(不是真正的“带来”——更像是“提供给”)
只要源类型对目标项目中的命名空间可用,它就必须通过
- 从目标项目直接引用源项目
- 直接引用目标项目中的源NuGet包
- 通过目标项目中另一个项目的可传递依赖关系间接引用源项目
- 通过另一个项目或目标项目的NuGet包的可传递依赖项间接引用源NuGet包
逻辑上
- 对源类型使用
语句的
当StringHandler.cs位于产品文件夹中时,我可以包括使用实用程序;在Product.cs中,但当它与项目文件夹(在Utilities文件夹中)一起位于单独的文件夹中时,我不知道如何包含它。有人能解释一下在这种情况下我如何使用using关键字吗
您不能使用使用
访问StringHandler
,因为您当前已定义了结构。原因是StringHandler
不是任何项目的一部分。因为它不是任何项目的一部分,它违反了我上面列出的规则
要按预期使用和,您有两个简单的选择:
- 将
StringHandler
直接添加到需要它的项目中,或者如果希望StringHandler
分开,请将它添加到另一个项目中,并从目标项目中引用该项目
- 再多花点功夫,将
StringHandler
放在它所在的位置(无项目),并在目标项目中包含指向该文件的链接。这有点作弊:它使它看起来像StringHandler
一直在Project
中。这种情况很少见;我个人只在我想包括,例如,公共程序集属性,而不是公共代码时才这样做
例如,在我的文件系统上,using真正指向的是哪里(我需要指定相对于我的csproj文件或CallCenter.sln文件的using目录吗?)
同样,忘记目录/文件夹/磁盘结构。只考虑解决方案中的物理引用(基于project/NuGet)和逻辑引用(基于命名空间)。它们通常与目录/文件夹/磁盘匹配,但不一定要匹配。或者在当前项目引用的另一个项目中。这是否意味着我需要在Utilities
文件夹中dotnet新控制台
,并在Project
文件夹的Project.csproj
文件中包含StringHandler.cs
和include
指令,除非你想把这些实用程序放在一个单独的dll中。我想把它们放在一个单独的dll中。但是将它们保存在单独的dll中有意义吗?我希望将实用程序方法和扩展方法与业务逻辑分开存储,我发现将它们分开有助于增加心理障碍。我完全按照我上面提到的做了,而且没有任何问题。看起来csproj文件是关键。只要在那里指定了它们的位置,其他一切都应该正常(包括名称空间)。我在Project.csproj中做了以下操作:
为此,您需要创建一个单独的库项目,并在需要的任何地方引用此项目,添加项目引用,这将允许使用包含项目名称空间的using
,如果您有一系列相关功能,将它们放在一个单独的dll中以供重用肯定是有意义的(例如,看看(不是我的项目),一个包含与扩展方法类似的各种功能的dll)。您必须将cs添加到项目中。using语句是库名称,与文件所在的路径无关。要使用VS菜单将cs文件添加到项目中,请执行以下操作:项目:添加现有项:浏览cs文件。添加文件后,您可以将名称空间添加到其他模块。
namespace Utilities
{
public static class StringHandler
{
public static string InsertSpaces(this string source)
{
string result = string.Empty;
if (!string.IsNullOrWhiteSpace(source))
{
foreach (char letter in source)
{
if (char.IsUpper(letter))
{
result = result.Trim();
result += " ";
}
result += letter;
}
}
return result.Trim();
}
}
}