Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使C#名称空间像Java包一样工作,以便在移动它们时自动重命名?_C#_Java_Namespaces_Package - Fatal编程技术网

如何使C#名称空间像Java包一样工作,以便在移动它们时自动重命名?

如何使C#名称空间像Java包一样工作,以便在移动它们时自动重命名?,c#,java,namespaces,package,C#,Java,Namespaces,Package,我来自Java,看到Java包非常方便。当您将一个类移动到另一个包时,它将自动更改该包。(当然,通过IDE,如Eclipse或Netbean) 但是C#正在使用名称空间,并且没有像Java中那样自动重命名我的名称空间。例如,我有一个名称空间为com.app的文件,我将它放在com.app中,但后来,我将此文件移动到com.lib文件夹,其名称空间仍然是com.app。所以,我发现这很难管理,因为我正在手动移动它 请帮我解决我的问题。(该文件的名称空间由其包含的文件夹命名,当我移动到其他文件夹时,

我来自Java,看到Java包非常方便。当您将一个类移动到另一个包时,它将自动更改该包。(当然,通过IDE,如Eclipse或Netbean)

但是C#正在使用名称空间,并且没有像Java中那样自动重命名我的名称空间。例如,我有一个名称空间为
com.app
的文件,我将它放在
com.app
中,但后来,我将此文件移动到
com.lib
文件夹,其名称空间仍然是
com.app
。所以,我发现这很难管理,因为我正在手动移动它


请帮我解决我的问题。(该文件的名称空间由其包含的文件夹命名,当我移动到其他文件夹时,我将自动更改)。我们能做到吗

我通过使用一个名为的IDE插件解决了这个问题。(在许多有用的特性中)它会在名称空间错误时突出显示(基于程序集的文件夹层次结构和根名称空间),并可以为您修复它

请注意,与Java不同的是,有时存在非常有效的理由使类位于由目录结构推断出的名称空间之外的名称空间中。一个很好的例子可能是扩展方法类,它需要位于调用它们的类的作用域中。因此,常见的情况是:

/myProject
  /extensions
     /MyExtensionMethodClass.cs

使用类似于
myProject
(这样扩展方法就可以在myProject中的任何地方使用,而无需使用指令)

这实际上是因为C#具有分部类的概念,也就是说,您可以将C#类分布在多个文件中,而不是像Java那样将其编码到单个文件中。因此,.Net中的名称空间是分布式容器,而不是由名称空间或运算符定义的集中式容器。

通常在
stackoverflow
社区中,会有许多无缘无故的反对票!!!我无法想象他们会沉默投票,什么也不说:)也许他们很聪明,他们认为其他问题很愚蠢,但他们仍然需要说点什么;)不是真的。这里的投票是完全匿名的。话虽如此,我认为反馈很重要。否决票最可能的原因是您不清楚使用的是什么IDE。你的问题也像一个咆哮而不是一个客观的问题。如果你删掉了这句话(比如说,你认为C#很不方便,但很明显你只是在学习,不知道你在说什么),那么你就有可能避免被否决。换句话说,不要让你的观点和偏见成为问题。祝你好运当涉及到c#的问题时,有些人可能也不喜欢java/package标记,但我的主要猜测是咆哮。@jmort253如果我的英语不好,很抱歉。但因为语言决定IDE的工作方式。因为包是物理的(意味着它将在项目中创建文件夹),而名称空间是虚拟的(在您的计算机中它不会使任何东西成为真实的),所以IDE将按照他们的决定工作。我的问题的意思是:我们可以有一些技巧,使VS工作室工作,就像我说的@hqt-我编辑了你的问题,这样它就不那么喧闹了,而且我对它进行了修改。我认为这是一个好问题。如果您认为您的问题失去了意义,请随时回滚。Visual Studio 2010有许多重构功能,以前只有通过Resharper才能使用。@jasonturges我不知道-它非常有用,我已经停止了没有它的编码。哦。这意味着Resharper将使名称空间与其包含的文件夹相似?如果名称空间声明与文件夹层次结构不匹配,则会在文件中标记名称空间声明,您可以为自己修复它(通常有一个键盘快捷键来调用Resharper操作)。正如Chris Shain所说,在某些情况下,您肯定不希望名称空间与文件夹匹配(如果您使用文件夹对文件进行分组,即使它们属于一个名称空间),我不明白您为什么要这样做?如果您将扩展类放在它自己的文件夹中,但名称空间相同,为什么不将文件也放在同一文件夹中呢?如果您想跨多个命名空间共享此扩展,那么无论如何都必须放置一个using语句。所以我不明白为什么这是一个与java不同的非常有效的理由。这是一个很好的正确解释,但它没有回答这个问题。下次你应该考虑写这样的评论。谢谢你的澄清。我在这个网站还是新手,所以我想我还是需要了解一下这里的工作原理:D.你很快就会明白的这是一个迷人的社区哼我不知道把你所有的部分放在不同的文件夹里是否是个好主意,但我想这可能就是他们这样做的原因。