2013-03-27 103 views
2

我有以下類別:爲什麼嵌套的公共類不如父級可訪問?

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

回答

4

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

相關問題