在C#中,是由子类继承的基类的“using”指令

本文关键字:基类 using 指令 继承 子类 | 更新日期: 2023-09-27 18:16:37

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

在C#中,是由子类继承的基类的“using”指令

using语句,在这种情况下,不要编译成代码——它们是帮助您的代码读起来更干净的工具。因此,它们不是"继承的"。

因此,要回答您的问题,您的Square类需要引用System.Foo——要么使用using语句,要么使用完全限定的类名。

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.
    }
}

using指令只有在类位于同一文件中并且它们没有像示例中那样嵌套在类本身中时才共享。

例如:

using System.Foo;
namespace N
{
    class A {}
    class B {}
}

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

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

using System.Foo;
namespace  Shapes {...

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