Ich arbeite seit einiger Zeit mit PHP Ich versuche, die Welt von C# zu erforschen. Ich habe versucht, die abstrakte Klassenimplementierung in cis zu verstehen. Ich habe gefunden etwas Fluktuation im Verhalten in beiden Sprachen. Deshalb poste ich es hier, um einen besseren Einblick in die abstrakte Klassenimplementierung in C# zu bekommen.Unterschied in der abstrakten Klassenimplementierung in C# und php
Sowohl PHP als auch C# erweitern die abstrakte Klasse. Das bedeutet, dass die gesamte Klasse, die von der abstrakten Klasse ausgeht, die abstrakten Methoden implementieren und nicht abstrakte öffentliche Methoden von der abstrakten Klasse erben muss.
Das Problem tritt beim Zugriff auf die Eigenschaft der untergeordneten Klasse von einer Methode der abstrakten Klasse. In PHP getHairColor()
kann die öffentliche Haar-Eigenschaft zugreifen. Aber in C# getHairColor()
kann nicht auf die öffentliche Haar-Eigenschaft der Klasse zugreifen, die sich von der abstrakten Klasse erstreckt.
Ich denke, wie die männliche Klasse erweitert Person Klasse, erbt auch die getHairColor()
Methode von der Elternklasse.So sollte es in der Lage sein, auf die Haar-Eigenschaft zugreifen. Hier macht PHP-Implementierung mehr Sinn als C#. Kann ich ein anderes Verhalten für ein ähnliches Konzept in zwei verschiedenen Sprachen richtig erklären?
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
Nein, Eigenschaften, die Sie definieren in:
Sie können
Hair
auchSetHairColor
als Setter der Eigenschaft implementieren Kinder sind nicht vom Elternteil erreichbar. Wenn alle 'Personen Haare haben, warum definierst du' Haare' nicht in 'Person'? – oerkelensWas passiert in PHP, wenn Sie "Person" erweitern und nicht "Haare" definieren? –
Aber es erstreckt sich von der abstrakten Klasse.So getHairColor ist eine geerbte Methode für Kind-Klasse.Das ist der Grund, warum ich denke, es sollte Haar Eigentum zugreifen.So, welche Sprache ist logischer in Bezug auf die Umsetzung der abstrakten Klasse-Konzept. –