Je voudrais créer une classe pour l'exemple suivant:Comment faire un champ de l'objet externe accessible en classe derivered
class BaseClass
{
protected int a;
}
class DeriveredClass : BaseClass
{
protected int ownA;
public void CopyFrom(BaseClass b)
{
ownA = b.a;
}
}
Mais il semble impossible en raison du niveau de protection. Le problème est que "b" est un objet externe dans la méthode CopyFrom().
Le code exact que je voudrais l'utiliser pour est de créer un objet Singleton avec une possibilité de mise à niveau à l'objet de type dérivé:
class MyLogicBase
{
private static MyLogicBase s_Instance = new MyLogicBase();
protected MyLogicBase() { }
public static MyLogicBase Instance
{ get { return s_Instance; } }
public static Upgrade(MyLogicBase newInstance)
{
newInstance.UpgradeInstance(s_Instance);
s_Instance = newInstance;
}
protected virtual void UpgradeInstance(MyLogicBase previousInstance)
{ // To override }
protected List<string> m_Database = new List<string>();
}
class MyExtendedLogic : MyLogicBase
{
public override void UpgradeInstance(MyLogicBase newInstance)
{
m_Database = newInstance.m_Database;
}
// Extended logic here
}
Bonjour! Merci pour une réponse rapide. Accidentellement, j'ai écrit un exemple de code qui ne montre pas le problème que je voudrais résoudre. Je suis désolé pour mon erreur. Corrigé Le problème est que je voudrais que la classe dérivée se configure en utilisant un objet de classe de base, tandis que les objets de la classe de base restent cachés des autres. –
@KamilKowalewski La solution est toujours la même. La méthode virtuelle 'UpgradeInstance' est le bon endroit où copier le champ' m_Database'. Si, pour une raison quelconque, vous ne voulez pas un comportement commun comme celui-ci dans la classe de base 'UpgradeInstance', déclarez une autre méthode dans ce but. –
Cela le rend un peu plus compliqué que je ne le pensais. Les classes dérivées différentes peuvent utiliser différents champs de classes de base de différentes manières. Mais cela résout mes besoins actuels. Merci! –