class我可以使用基类中名称空间的属性

时间:2012-03-05 23:28:06

标签: c# .net

有一个简单的问题,看起来很简单,但我一直在寻找无法取回它的原因。

  1. 如果我在基类中导入了一个名称空间,我可以在所有派生类中使用名称空间的属性(类,对象,方法等)吗?
  2. 例如

    using System.Collections.Generic;
    public class MyBase
    {
         public string GetName()
            {
                List<string> ss = new List<string>();
                return ss.ToString();
            }
    }
    

    我可以在所有从我的基础中分类的子项中使用List属性而不具有命名空间吗?像

    public class myChild : MyBase
        {
            public string GetName()
            {
                List<string> ss = new List<string>();
                return ss.ToString();
            }
        }
    

    如果不是为什么?我在部分类中也注意到了相同的行为..有人可以解释其背后的原因吗?

2 个答案:

答案 0 :(得分:3)

听起来你问的是以下

  

如果在导入命名空间的文件中定义了父类型,如果从父类派生,是否必须重新导入该命名空间?

如果是这样,答案是肯定的。子类型不会继承在定义父类型的文件中导入的名称空间(部分原因是使用partial类型,可以在具有冲突名称空间的多个文件中定义类型)。每个文件都是根据它自己的导入集编译的。

答案 1 :(得分:2)

using语句不是可执行代码,并且它们不适用于类或类的成员。相反,它们为编译器提供有关如何解析类型名称的信息。 using语句仅在包含它的文件的范围内;此外,如果它在命名空间声明中,它只在该命名空间声明中有效。

请注意,文件中可能有多个名称空间声明,因此:

namespace N
{
    using System.IO;
    partial class C
    {
        public FileInfo SomeFileInfo { get; set; }
    }
}

namespace N
{
    partial class C
    {
        public DirectoryInfo SomeDirectoryInfo { get; set; }
    }
}

无法解析对DirectoryInfo的引用,因为此时using System.IO;不在范围内。