2009-05-18 7 views
-1

J'ai vu le type de scénario suivant dans certains sites Web. Est-ce que quelqu'un peut m'aider quand utilisons-nous ce type de scénario exactement ...?quand créons-nous ce type d'objet en C# ...?

class emp 
{ 

    public void add() 
    { 
     MessageBox.Show("Emp class"); 
    } 
} 

class dept : emp 
{ 
    public void disp() 
    { 
     MessageBox.Show("dept class"); 
    } 
} 

emp ee = new dept(); 

Je veux juste savoir quand nous créons ce type de emp objet 'ee = new département() au lieu de 'emp ee = new emp()' grâce, Siva

+0

Pouvez-vous être plus élaboré? – Rohit

+0

Vous devez être plus clair sur votre question si vous voulez des réponses plus spécifiques qu'un paragraphe d'un tutoriel OO. – mquander

+0

Ceci est une copie d'environ 50 questions sur StackOverflow, par exemple: http: // stackoverflow.com/questions/154577/polymorphisme-vs-overriding-vs-surcharge et http://stackoverflow.com/questions/778888/which-oo-concept-is-this-a-example-of et un qui a été demandé récemment (mais je ne peux pas le trouver). Voter pour fermer. – Cerebrus

Répondre

8

Le l'exemple ci-dessus montre l'héritage. L'héritage est une relation "IS A", dans ce cas le "dept" EST un "emp", ce qui signifie que chaque fois que votre code utilise un emp, il devrait aussi être capable d'utiliser un objet dept.

L'attribution d'un nouveau service à ee montre qu'un service est un emp, même s'il peut ajouter des fonctionnalités supplémentaires, telles que la méthode disp.

+0

Il s'agit en fait du "Polymorphisme de l'Héritage" pour être très précis! ;-) – Cerebrus

2

Le processus illustré ici est appelé Héritage.

Fondamentalement, ce qui est fait est que le type de la variable ee est déclaré comme étant de type emp; c'est légal parce que le type dept a une relation is-a à emp (en le disant à haute voix, c'est, "dept est un type d'emp").

Vous pouvez le faire lorsque vous voulez accepter n'importe quelle variable qui hérite de emp (comme indiqué par la déclaration class dept : emp) en tant que paramètre de quelque sorte.

0

Vous voulez dire l'héritage? Si c'est ce que vous demandez, vous devez obtenir un livre sur object oriented programming in C#.

Il n'y a pas de raison pour la méthode disp() sur le rayon. Vous pouvez simplement aller:

emp ee = nouveau dept(); ee.add();

Cela appellera la méthode add() dans emp.

+0

Je veux dire quand est-ce que nous créons ce type d'objet ..emp ee = nouveau dept() – sivaramakrishna

+0

Tout le temps ... pour beaucoup, beaucoup de raisons. –

0

Ceci est clairement l'héritage ..

En héritage U besoin de créer cet objet si tu veux utiliser à la fois Methoda de classe dérivée aswell comme méthodes de classe de base ..

Hope this utile

0

U besoin de créer cet objet si vous voulez utiliser les deux méthodes de classe dérivée ainsi que les méthodes de classe de base ..

0

Nous le faisons pour le polymorphisme d'exécution. Lorsque nous devons appeler une méthode de classe dérivée, mais quelle classe dérivée doit être appelée dépend de l'exécution basée sur l'entrée de l'utilisateur. Ceci est un exemple très simple:

static void Main(string[] args) 
     { 
      List<Shape> shapes = new List<Shape>(); 
      shapes.Add(new Circle()); 
      shapes.Add(new Square()); 
      shapes.Add(new Rectangle()); 

      foreach (Shape s in shapes) 
       s.Draw(); 

      Console.Read(); 
     } 

public class Shape 
    { 
     public virtual void Draw() { } 

    } 

    public class Square : Shape 
    { 
     public override void Draw() 
     { 
      // Code to draw square 
      Console.WriteLine("Drawing a square"); 
     } 
    } 

    public class Circle : Shape 
    { 
     public override void Draw() 
     { 
      // Code to draw circle 
      Console.WriteLine("Drawing a circle"); 

     } 
    } 

    public class Rectangle : Shape 
    { 
     public override void Draw() 
     { 
      // Code to draw circle 
      Console.WriteLine("Drawing a rectangle"); 

     } 
    } 

*****Output: 
Drawing a circle 
Drawing a square 
Drawing a rectangle***** 

Dans le scénario pratique peut-être l'utilisateur détermine à l'exécution dont la forme qu'il veut dessiner. Donc, lors de l'implémentation, vous devez créer un objet de la classe Shape, et lui assigner un cercle, un rectangle ou un carré en fonction de la sélection de l'utilisateur (dans un commutateur ou if-else). Et lorsque vous appelez Shape.Draw(), il appelle la méthode de classe dérivée appropriée.