假设我们有一个基类Rectangle
和一个派生类Square
:
namespace Shapes {
using System.Foo;
public class Rectangle {
public Rectangle(int l, int w){}
}
}
namespace Shapes {
public class Square : Rectangle
public Square(int l, int w){}
}
Square
类是否必须明确说明它正在使用System.Foo
?我的结果变得不稳定了。在一个项目中,using
指令似乎是继承的,而在Web应用程序中则不是。
答案 0 :(得分:9)
using
语句不会编译为代码 - 它们是帮助您使代码更清晰的帮助程序。结果,它们不是“继承”的。
因此,要回答您的问题,您的Square
课程需要引用System.Foo
- 使用using
语句或使用完全限定的类名。
答案 1 :(得分:8)
using
语句只会从同一文件中声明的级别传播到下一组结束括号(}
)。
//From File1.cs
using System.Baz;
namespace Example
{
using System.Foo;
//The using statement for Foo and Baz will be in effect here.
partial class Bar
{
//The using statement for Foo and Baz will be in effect here.
}
}
namespace Example
{
//The using statement for Baz will be in effect here but Foo will not.
partial class Bar
{
//The using statement for Baz will be in effect here but Foo will not.
}
}
//From File2.cs
namespace Example
{
//The using statement for Foo and Baz will NOT be in effect here.
partial class Bar
{
//The using statement for Foo and Baz will NOT be in effect here.
}
}
答案 2 :(得分:2)
using
指令仅在类位于同一文件中时才共享,并且它们不像示例那样嵌套在类本身中。
例如:
using System.Foo;
namespace N
{
class A {}
class B {}
}
如果这一切都在一个文件中,A
和B
都可以使用Foo
。
答案 3 :(得分:1)
using System.Foo;
namespace Shapes {...
导入应该始终是最重要的,而不是在命名空间内。这将允许类的整个结构在需要时依赖于该导入。
答案 4 :(得分:1)
我认为每个人在使用指令时都忽略了这一点。它们实际上与类完全无关。代码文件中的using directives(.cs,.vb等...)不是文件中定义的类的一部分。编译时,编译器使用它们来解析名称空间。