为什么嵌套的公共类不如父级可访问?

问题描述:

我有以下类别:为什么嵌套的公共类不如父级可访问?

public abstract class Navigator<T> where T : Navigator.Route 
{ 
    public class Route 
    { 
    } 
} 

public class P2PNavigator : Navigator<P2PNavigator.Route> 
{ 
    public class Route : Navigator.Route 
    { 
    } 
} 

在编译过程中,我收到两个错误。

可访问性不一致:约束类型“Navigator.Route”比导航<Ť>'

可访问性不一致:基类的不易接近Navigator.Route'比少类可访问的‘P2PNavigator.Route’

一切都有public无障碍。我错过了什么来完成这项工作?我意识到我最终可以让它们成为所有命名空间级别的类,但是我更喜欢嵌套。


编辑:多亏了答案,我发现这个问题的根本原因是我的部分类没有正确定义。

public partial abstract class Navigator<T> where T : Navigator.Route 
{ 
} 

partial class Navigator // Different to Navigator<T> and implicitly internal. 
{ 
    public class Route 
    { 
    } 
} 
+4

我在这里没有看到Navigator.Route的定义。我看到P2PNavigator和Navigator ,它不是导航器 – Moho 2013-03-27 22:47:46

+0

Per @Moho,它是至关重要的,例如,如果该类不像public class {...}那样公开,那么我会得到完全错误(有充分理由) ' – blins 2013-03-27 22:53:08

+1

我会考虑将公共嵌套类移出对象。如果你使用代码分析,你会得到[嵌套类型不应该是可见的](http://msdn.microsoft.com/en-us/library/ms182162.aspx) – 2013-03-27 22:57:32

Navigator.Route是不一样的Navigator<P2PNavigator.Route>.Route,应该给你其他错误。

是正确指定类型

代码编译OK:

public abstract class Navigator<T> where T : Navigator<T>.Route 
{ 
    public class Route 
    { 
    } 
} 

public class P2PNavigator : Navigator<P2PNavigator.Route> 
{ 
    public class Route : Navigator<P2PNavigator.Route>.Route 
    { 
    } 
} 

你可能有一些非通用类Navigator,使您的样品comile与你看到的错误。

+1

应该是公共抽象类导航其中T:导航 .Route { 公共类路由 { } } 公共类P2PNavigator:导航 { 公共类新路线:导航。路线 { } } – 2013-03-27 22:52:27

+0

@KeithNicholas,如果想在没有警告的情况下进行编译,可以在第二个Route类中加入'new'。我会保持代码原样,因为它可能应该在实际代码中以不同的方式修复。 – 2013-03-27 23:00:04