Ignorer l'assemblage Deux pour le moment. Vous ne seriez pas capable d'instancier une instance de classe C, car elle hérite de B, pour laquelle il n'y a pas de constructeur public. Par conséquent, si vous supprimez le problème d'héritage de la classe C, vous aurez toujours un problème à créer des instances de la classe B en dehors de l'assemblage de B en raison des niveaux de protection. Vous pourriez utiliser la réflexion pour créer des instances de B, cependant.
Aux fins de l'essai, je modifié vos classes comme suit:
public class A
{
internal A(string s)
{
PropSetByConstructor = s;
}
public string PropSetByConstructor { get; set; }
}
public class B : A
{
internal B(string s)
: base(s)
{
PropSetByConstructor = "Set by B:" + s;
}
}
J'ai alors écrit une application de la console à tester:
static void Main(string[] args)
{
System.Reflection.ConstructorInfo ci = typeof(B).GetConstructors(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)[0];
B B_Object = (B)ci.Invoke(new object[]{"is reflection evil?"});
Console.WriteLine(B_Object.PropSetByConstructor);
Console.ReadLine();
}
Je ne recommanderais pas le faire, son juste mauvais entraine toi. Je suppose que dans tous les cas il y a des exceptions, et l'exception ici est peut-être de devoir faire face à une bibliothèque tierce que vous ne pouvez pas étendre. Cela vous donnerait un moyen d'instancier et de déboguer, sinon hériter.