J'ai deux classes, BaseO
y PrivateO
définis dans une autre classe, Overflow
. BaseO
est une classe publique, et PrivateO
est privé. J'ai également une classe enfant à BaseO
appelé ChildO
qui est également public.
Maintenant, dans BaseO
Je veux définir une fonction protégée protected Private0 getPrivate();
qui ChildO1
peut accéder. Mais cela n'est pas autorisé, car getPrivate
a une accessibilité différente de celle de PrivateO
.
Je comprends pourquoi c'est un problème, si quelqu'un devait hériter BaseO
de l'extérieur Overflow
ils doivent avoir accès à PrivateO
ce qui n'est pas le cas.
J'ai contourné le problème pour l'instant en utilisant des objets et des casts, mais j'aimerais le faire plus correctement. Existe-t-il un moyen de spécifier que BaseO
n'est pas destiné à être hérité de l'extérieur de l'UE. Overflow
?
internal
est une idée, mais j'aimerais que cela fonctionne même lorsque le code n'est pas dans une assemblée différente.
J'ai accès à .NET 4.5 et C# 5, mais toute version plus récente serait également intéressante.
Exemple de code :
public static class Overflow
{
private class PrivateO
{
public int foo;
}
public class BaseO
{
protected PrivateO GetPrivate() // inconsistent accessibility
{
return new PrivateO();
}
}
public class ChildO : BaseO
{
private int foo;
public ChildO()
{
this.foo = GetPrivate().foo; // <- desired behavior
}
}
}
Edit : Notez que le code d'exemple n'est que cela, un exemple. La vraie classe PrivateO est beaucoup plus complexe, et il ne s'agit pas seulement de récupérer un int. Elle renvoie également des classes de constructeurs privés et d'autres structures de données non triviales.
Edit 2 : Modifié Overflow
à une classe statique pour souligner qu'elle est dans ce cas utilisée plus comme un espace de nom que comme une classe instanciable.