2009-12-31 10 views
-1

Je cet ensemble de classes:
Node (SUPER classe)
| ------ NodeType1 (Classe)
| ---------- NodeType2 (Class)Hiérarchie des classes en C#

Il existe des champs que le type1 et le type2 ont en commun (par exemple: NAME). Si je déclare le champ NAME dans la classe SUPER (Node), comment dois-je accéder à ces variables dans les classes de types? Comment puis-je faire ces biens? Merci pour votre temps

Répondre

2

Si le access modifier du champ name est public ou protected vous serez en mesure d'y accéder dans vos classes dérivées. Le modificateur public le rendra visible à toutes les autres classes, tandis que protected limitera la visibilité aux classes dérivées.

Dans les deux cas, vous pouvez simplement accéder comme vous le feriez un champ déclaré dans la classe actuelle:

this._name = "New Name"; 

Si vous souhaitez en faire une propriété modificateur puis définissez c'est d'accès en conséquence:

public class Node 
{ 
    protected string Name { get; set; } 
} 
+0

Donc, si les champs sont 'protégés', le NodeType accédera alors par this.Field. Et puis à l'intérieur du Type je fais la propriété de ces champs? – Ricardo

+0

public class Noeud { protected string Nom {get; ensemble; } } J'ai essayé ceci une fois, et je dois avoir fait équipe ... Il n'est pas devenu une propriété – Ricardo

+0

@Ricardo - Oui à votre première question (je mettais à jour ma réponse comme vous avez commenté). Le point à propos de la propriété était de dire que les mêmes règles s'appliquent aux propriétés que les champs do à. Je ne sais pas pourquoi le code que vous avez n'a pas fonctionné. Vous devez poster votre utilisation et le message d'erreur. – ChrisF

3
class Node 
{ 
    public string Name { get; set; } 
} 

class NodeType1 : Node 
{ 
    void SomeMethod() 
    { 
     string nm = base.Name; 
    } 
} 

class NodeType2 : NodeType1 
{ 
    void AnotherMethod() 
    { 
     string nm = base.Name; 
    } 
} 
+1

En fait, vous n'avez même pas besoin de la "base". devant la propriété – Rik

+0

Vous n'avez pas compris ma question, mais je vois ce que vous voulez dire. tu as aidé. – Ricardo

+0

@Rik, Pas dans ce cas, mais dans le cas général, où il pourrait y avoir une propriété avec le même nom cachant la base, vous faites. –

1

Vous pouvez accéder à ce champ juste la façon dont vous avez généralement accès au champ, en tapant this.fieldName, par exemple. N'oubliez pas de marquer ce champ comme protected pour être visible dans les héritiers ou public pour être visible à la fois dans les héritiers et à l'extérieur de la classe.

class Node 
{ 
    protected string protectedName; 
} 

class NodeType1 : Node 
{ 
    public string Name 
    { 
     get 
     { 
      return protectedName; 
     } 
    } 
} 

class NodeType2 : NodeType1 
{ 
    protected void Foo() 
    { 
     string bar = Name; 
    } 
} 
+0

merci pour votre aide – Ricardo