J'ai rencontré un scénario où je dois hériter uniquement de nombreuses propriétés de la classe de base et laissez d'autres propriétés telles que c'est.
donc par exemple p> maintenant Je devrais pouvoir utiliser des propriétés comme B.A1, B.B1 et B.A3, mais je ne veux pas que A2 soit disponible dans la classe B ***. N'oubliez pas que je ne veux pas utiliser privé ***, je dois le garder public parce que son document d'entité Mongo et doit être stocké à Mongo DB P> essaie de partager peu Propriétés communes entre deux entités utilisant l'héritage. strong> p> p>
3 Réponses :
refacteur.
Je dois avoir mal compris la question, puisque la classe B code> toujours hérite A1 code> propriété de AA code>.
Vous pouvez masquer les variables publiques en les observant avec des privés.
class Base {
public string P1 { get; set; }
public string P2 { get; set; }
}
class Limited: Base {
new private string P1 { get; set; }
// P2 will be inherited as public, P1 will be hidden to the user
}
Les membres de la masquage sont quelque chose qui peut être forcé sur vous par une classe de base ou une interface, mais vous ne devriez jamais y considérer comme un outil de modélisation valide. Toujours l'éviter.
Eh bien, si nous ne voulons pas la propriété A2 code> accessible à partir de la classe dérivée B code> nous
(Très probablement) ne devrait pas utiliser l'héritage en premier lieu.
Nous pourrions utiliser l'agrégation à la place: class A
{
public string A1 { get; set; }
public string A2 { get; set; }
}
class B
{
public string A1 { get; set; }
public string A3 { get; set; }
public string B1 { get; set; }
public B(A instance)
{
this.A1 = instance.A1;
}
}
C'est ce qui a fonctionné pour moi maintenant. Je pense que c # L'équipe peut penser à la fonctionnalité où vous pouvez simplement ignorer peu de propriétés de l'héritage.
@Krunalparmar - aucune équipe C # ne fera jamais cela. Cela briserait C # et oo.
faites-le privé que vous ne voulez pas être visible en enfant
@Ehsansajjad c'est une entité pour le document de Mongo, vous ne pouvez donc pas le rendre privé sinon le champ ne sera pas enregistré à Mongo DB.
Soyez clair sur les champs des propriétés VS, également en pseudo code.
@Bommelding c'est vrai, mais alors j'ai une classe imbriquée à l'intérieur, ce qui le rend complexe.