Hand-E-Food
Hand-E-Food

Reputation: 12794

Why is a nested public class less accessible than it's parent?

I have the following classes:

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

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

During compilation I receive two errors.

Inconsistent accessibility: constraint type 'Navigator.Route' is less accessible than Navigator<T>'

Inconsistent accessibility: base class 'Navigator.Route' is less accessible than class 'P2PNavigator.Route'

Everything has public accessibility. What am I missing to make this work? I realise I could ultimately make them all namespace level classes, but I would prefer to have nesting.


EDIT: Thanks to the answers, I found the root cause of the problem was my partial classes weren't defined properly.

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

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

Upvotes: 2

Views: 200

Answers (1)

Alexei Levenkov
Alexei Levenkov

Reputation: 100547

Navigator.Route is not the same as Navigator<P2PNavigator.Route>.Route and should be giving you other errors.

Code that specifies types correctly compiles 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
    {
    }
}

You probably have some non-generic Navigator class that makes your sample comile with errors you see.

Upvotes: 4

Related Questions