-1
votes

Comment hériter de quelques propriétés de la classe de base

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 xxx

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

essaie de partager peu Propriétés communes entre deux entités utilisant l'héritage.


4 commentaires

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.


3 Réponses :


3
votes

refacteur. xxx


1 commentaires

Je dois avoir mal compris la question, puisque la classe B toujours hérite A1 propriété de AA .



-1
votes

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
}


1 commentaires

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.



1
votes

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;
    }
}


2 commentaires

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.