在C#中是子类继承的基类的`using`指令?

时间:2014-08-05 20:12:22

标签: c# inheritance namespaces using

假设我们有一个基类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应用程序中则不是。

5 个答案:

答案 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 {}
}

如果这一切都在一个文件中,AB都可以使用Foo

答案 3 :(得分:1)

using System.Foo;

namespace  Shapes {...

导入应该始终是最重要的,而不是在命名空间内。这将允许类的整个结构在需要时依赖于该导入。

答案 4 :(得分:1)

我认为每个人在使用指令时都忽略了这一点。它们实际上与完全无关。代码文件中的using directives(.cs,.vb等...)不是文件中定义的类的一部分。编译时,编译器使用它们来解析名称空间。