Mar*_* S. 11 c# python java namespaces packages
在Java和Python世界中,您查看源文件并知道所有导入的来源(即您知道在哪个文件中定义了导入的类).例如:
在Java中:
import javafoo.Bar;
public class MyClass {
private Bar myBar = new Bar();
}
Run Code Online (Sandbox Code Playgroud)
您立即看到Bar-class是从javafoo导入的.因此,Bar被宣布进入/javafoo/Bar.java
在Python中
import pythonbaz
from pythonfoo import Bar
my_bar = Bar()
my_other = pythonbaz.Other()
Run Code Online (Sandbox Code Playgroud)
很明显,Bar来自pythonfoo包,而Other显然来自pythonbaz.
在C#中(如果我错了,请纠正我):
using foo
using baz
using anothernamespace
...
public class MyClass
{
private Bar myBar = new Bar();
}
Run Code Online (Sandbox Code Playgroud)
两个问题:
1)我如何知道Bar-class的声明位置?它来自命名空间foo,或者bar,还是anothernamespace?(编辑:不使用Visual Studio)
2)在Java中,包名称对应于目录名称(或者,它是一种非常强大的约定).因此,当您看到类来自哪个包时,您就知道它在文件系统中的目录.
在C#中,似乎没有命名空间的这种约定,或者我错过了什么?那么,我如何知道要查看的目录和文件(没有Visual Studio)?(在确定该类来自哪个命名空间之后).
编辑澄清:我知道Python和/或Java允许通配符导入,但这些语言中的"文化"对它们不满(至少在Python中,在Java中我不确定).此外,在Java IDE中通常可以帮助您创建最小的导入(如下面的Mchl.)
1)嗯,你也可以用Java做同样的事情:
import java.util.*;
import java.io.*;
...
InputStream x = ...;
Run Code Online (Sandbox Code Playgroud)
是否InputStream来自java.util或java.io?当然,您可以选择不使用该功能.
现在,理论上我意识到这意味着当你用文本编辑器查看时,你无法分辨出C#中的类型来源......但在实践中,我并不认为这是一个问题.多久,你实际上是在寻找的代码,并且不能使用Visual Studio?
2)当然,您也可以在.NET中使用相同的约定 - 我也这样做,虽然我没有空目录上链...所以如果我创建一个默认命名空间为XY的项目,然后X.Y.Foo就会进入Foo.cs,而XYZBar会进入Z\Bar.cs
这也是Visual Studio默认执行的操作 - 如果您创建子文件夹,它将使用基于项目默认值和文件夹结构的命名空间创建新类.
当然,您也可以在任何旧文件中声明类型 - 但大多数人会遵循声明具有相应文件名的类型的常规惯例.在泛型使委托声明更少之前,我曾经有一个Delegates.cs包含特定命名空间的所有委托声明的文件(而不是拥有一堆单声明文件)但是现在这不是问题.
| 归档时间: |
|
| 查看次数: |
4318 次 |
| 最近记录: |