Je travaille avec PHP depuis un moment maintenant j'essaie d'explorer le monde de C#. J'essayais de comprendre la mise en œuvre de la classe abstraite en c sharp.J'ai trouvé une certaine fluctuation dans le comportement dans les deux langues. C'est pourquoi je l'affiche ici afin que je puisse avoir une meilleure idée de la mise en œuvre de la classe abstraite en C#.Différence dans la mise en œuvre de la classe abstraite en C# et php
PHP et C# étendent la classe abstraite. Cela signifie que toute la classe qui s'étend de la classe abstraite doit implémenter les méthodes abstraites et hériter des méthodes publiques non abstraites de la classe abstraite.
Le problème se pose lors de l'accès à la propriété de la classe enfant à partir d'une méthode de la classe abstraite. En PHP getHairColor()
peut accéder à la propriété de cheveux publics. Mais en C# getHairColor()
ne peut pas accéder à la propriété de cheveux publics de la classe qui s'étend de la classe abstraite.
Je pense que la classe Male étend la classe Person, elle hérite également de la méthode getHairColor()
de la classe parente. Ainsi, elle devrait pouvoir accéder à la propriété hair. Ici, l'implémentation PHP a plus de sens que C#. Puis-je obtenir une explication appropriée pour un comportement différent pour un concept similaire dans deux langues différentes?
PHP:
abstract class Person{
abstract public function setHairColor($color);
public function getHairColor(){
return $this->hair; // $this->hair is accessible from here
}
}
class Male extends Person{
public $hair;
public function setHairColor($color){
$this->hair = $color;
}
}
$male1 = new Male();
$male1->setHairColor("black");
echo $male1->getHairColor(); // access hair property
C#:
abstract class Person
{
public abstract void setHairColor(string hair);
public string getHairColor()
{
return this.hair; // this.hair is not accessible from here
}
}
class Male : Person
{
public string hair;
public override void setHairColor(string hair)
{
this.hair = hair;
}
}
Male male1 = new Male();
male1.setHairColor("black");
Console.WriteLine(male1.getHairColor()); // can not access hair property
Non, les propriétés que vous définissez dans les enfants ne sont pas accessibles depuis le parent. Si tous les 'Person's ont des cheveux, pourquoi ne pas définir' hair' dans 'Person'? – oerkelens
Que se passera-t-il en PHP si vous étendez 'Person' et ne définissez pas' hair'? –
Mais il s'étend de la classe abstraite. Donc getHairColor est une méthode héritée pour la classe enfant.C'est pourquoi je pense qu'il devrait accéder à la propriété de cheveux.Ainsi, quel langage est plus logique concernant la mise en œuvre du concept de classe abstraite. –