C#中受保护的类

时间:2010-03-14 16:59:09

标签: c#

这对我编译很好 - 但是不同线程上的其他人都说无法在顶级c#中声明受保护的类

是这样的吗?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    protected class CsvReader
    {
    }
}

4 个答案:

答案 0 :(得分:6)

对于我来说,无法使用VS2008SP1或VS2010进行编译(在两种情况下都使用命令行中的csc.exe)。

您使用的是哪种编译器?

来自C#规范的第3.5.1节:

  
      
  • 以编译单位声明的类型   或命名空间可以有public或   internal声明了可访问性和   默认为internal声明   可访问性。
  •   
  • 班级成员可以   有五种声明中的任何一种   可访问性和默认为private   声明可访问性。 (注意一个   声明为类成员的类型   可以有五种中的任何一种   声明可访问性,而类型   声明为命名空间的成员   只能publicinternal   声明可访问性。)
  •   

答案 1 :(得分:4)

考虑:顶级课程中protected甚至意味着什么。在类成员上,这意味着派生类可以访问该成员。但是没有派生命名空间这样的东西,那么protected甚至会引用什么?

答案 2 :(得分:1)

我不知道它是否编译,但问问自己:这意味着什么? 似乎表示只能从CsvReader命名空间,或任何派生的命名空间(?)中访问ConsoleApplication1;但显然这是无稽之谈。这就是为什么规范中不允许这样做的原因。 (至少那将是我的解释。)

答案 3 :(得分:0)

由于没有代码能够访问它,所以不能将类声明为顶级保护(除非继承,否则应使用抽象类)。为什么要创建无法访问的代码?