2013-05-30 4 views
0

Quelqu'un peut-il me faire savoir "Comment accéder aux variables de classe de base dans la classe dérivée"?Comment accéder à une valeur de classe de base à partir de la classe dérivée C#

Exemple:

Code de classe 1.cs

public class baseClass 
{ 
    public int intF = 0, intS = 0; 
    public int addNo() 
    { 
     int intReturn = 0; 
     intReturn = intF + intS; 
     return intReturn; 
    } 
} 

Public class child : baseClass 
{ 
    public int add() 
    { 
     int intReturn = 0; 
     intReturn = base.intF * base.intS; 
     return intReturn; 
    } 
} 

code Class2.cs

class Program 
{ 
    static void Main(string[] args) 
    { 
     baseClass obj = new baseClass(); 
     obj.intF = 5; 
     obj.intS = 4; 
     child obj1 = new child(); 
     Console.WriteLine(Convert.ToString(obj.addNo())); 
     Console.WriteLine(Convert.ToString(obj1.add())); 
     Console.ReadLine(); 
    } 
} 

Le problème est dans la classe des enfants qui obtient héritées de la classe de base ..

La valeur de intF et intS est toujours affichée comme 0 au lieu de 5 & 4. Quelqu'un peut-il me dire où je me trompe?

Cordialement,

G.V.N.Sandeep

+0

Les deux réponses sont correctes. Les deux moyens les plus simples pour obtenir le résultat attendu sont: 1) déclarer obj comme "baseClass obj = new child()" et supprimer la ligne où vous créez obj1 (ce sera toujours par défaut); et 2) déclarer intF et intS comme "public static int" – Daniel

+0

Exact dupliquer (pourquoi?): http://stackoverflow.com/questions/5296026/ –

Répondre

3

champs d'instance intF et intS appartiennent à ... par exemple, et non pas à un type. Lorsque vous les définissez pour l'instance obj, les mêmes champs dans l'instance obj1 ont leurs valeurs par défaut (zéros).

Vous devez attribuer 5 et 4 ainsi:

child obj1 = new child(); 
obj1.intF = 5; 
obj1.intS = 4; 
1

Vos champs ne sont pas static. Il y a un champ séparé pour chaque instance (objet) que vous créez.

obj et obj1 sont des instances distinctes. Par ailleurs, il n'est pas nécessaire d'utiliser le mot-clé base dans cette situation. Par conséquent, il est inutile d'utiliser le mot-clé base. Les deux champs sont dans la classe child en raison de l'héritage. Utilisez uniquement base lorsque la classe actuelle remplace ou masque un membre de la classe de base.

Questions connexes