Comment étendre une Classe en C#?
J'ai mon propre Objet, et je tiens à le prolonger, l'enregistrement des données provenant d'une personne et l'ajout de nouvelles informations.
De sorte que le code serait:
public class Student : Person
{
public string code { get; set; }
}
mais quand j'essaie d'init et ajouter la nouvelle valeur:
Person person = new Person("Paul", "Catch");
Student student = (Person)person;
student.code = "1234";
J'ai eu System.InvalidCastException: Unable to cast object of type 'MyLayer.Person' to type 'Student'.
Ai-je raté?
MODIFIER: peut-être que j'ai tort de mettre cette Personne de la classe. Vous devez supposer qu'il en devenir à partir d'une base comme objet, comme Person person = new MyPersons().First();
Donc je ne vais pas à remplir le nouveau avec des propriétés, un par un, juste étendre une propriété grâce à la nouvelle de l'objet qui s'étendent à l'ancien.
Person
classe..Veuillez afficher la définition de la classe
Person
.Je ne peux pas! Il n'est pas "Personne" en fait, c'est une autre classe dans une DLL, mais ce n'est pas important?
person
est explicitement exprimés comme Person
alors implicitement convertie en Student
(au Cours de la =
affectation). Je crois que vous vouliez dire explicitement exprimés directement à Student
Un
Student
est un Person
mais l'inverse n'est pas nécessairement vrai - une Person
n'est pas toujours un Student
. C'est pourquoi votre plâtre est un échec.
OriginalL'auteur markzzz | 2013-03-06
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas convertir un
Person
àStudent
directement.L'héritage en POO est livré avec
hierarchy level
, c'est à dire que vous pouvez lancer lederived
classe debase
classe, mais laopposite is not possible
.You cannot cast base class to derived class
Une solution possible est :
Créer
Student
d'une Personne à l'aide deconstructor overload
.Student
à partir d'unPerson
. Vous ne pouvez pas étendre Personne.puis-je utiliser un "générique" de base? Parce que Personne à venir avec plus de 20 propriétés...ce qui est terrible d'écrire TOUS les
et comment peut -
Generic
vous aider à composer avec 20 propriétés?Générique ressemble beaucoup à la création de Modèle, même si vous utilisez des médicaments génériques que vous avez à traiter avec 20 propriétés.
Je veux dire, étendre "TOUS les" il est dans la prolongation de la classe...
OriginalL'auteur PaRiMaL RaJ
Attribuer un
Student
à votrePerson
.Notez que cela rend tout le casting assez inutile, est-ce mieux:
Votre plâtre doit être à
Student
, pasPerson
.OriginalL'auteur poitroae
Dans votre
Student
classe, ajoutez ce constructeur, en supposant que vous avez un constructeur qui prend deux chaînes de caractères dans lePerson
classealors vous pouvez l'utiliser comme ceci
OriginalL'auteur Jason
Le problème que vous voyez n'est que dans votre mission, vous êtes en essayant de abattu Personne de l'Élève. Ce n'est pas possible, parce que l'objet est une Personne, et le type de Personne n'a pas connaissance de l'Étudiant.
Mon interprétation, c'est que les objets ont un type spécifique, indépendamment de la façon dont vous le lancez. Un plâtre (comme la façon dont la lumière est jeté sur un objet) dicte la façon de voir cet objet. Dans le cas de l'exemple, une Personne n'a pas connaissance d'un Étudiant, par conséquent, peu importe comment vous le regardez, vous ne pouvez pas assigner à l'élève.
Un Étudiant de l'objet, cependant, peut être sortie de la Personne, car chaque Élève est une Personne. Vous pouvez toujours sortie pour les classes de base, mais vous ne pouvez pas toujours baissés pour les classes dérivées.
J'espère que cela vous donne un peu de clarté. (J'espère aussi j'ai eu ce totalement à droite.)
OriginalL'auteur raynjamin
Votre conversion est incorrect, une personne peut devenir un étudiant (Pas l'inverse)
Changement:
Bien que votre type de casting peut être évitée ..
Devient ....
L'homme oui, mais je n'ai pas créer de "Personne", j'ai déjà (il devenir avec plus de 20 propriétés, donc je veux en créer un nouveau de les copier un par un). J'ai juste besoin de "prolonger" 1 propriétés dans une classe
OriginalL'auteur EverythingGeek