L'erreur “une conversion explicite existe (vous manque un cast )” vient lors de la création d'un objet:
Je suis intéressé à en apprendre Oups concepts. Tout en essayant un programme simple utilisant l'Héritage. J'ai remarqué cette erreur. Je ne comprends pas pourquoi cette erreur se produit? J'ai vu que simple c# code ci-dessous:
class Animal
{
public void Body()
{
Console.WriteLine("Animal");
}
}
class Dog : Animal
{
public void Activity()
{
Console.WriteLine("Dog Activity");
}
}
class Pomeranian : Dog
{
static void Main(string[] args)
{
//Dog D = new Dog();
Dog D = new Pomeranian(); -----> No error occur at this line
Pomeranian P = new Dog(); -----> Error occur at this line
D.Body();
D.Activity();
Console.ReadLine();
}
}
Toute une, merci de me dire ce qui se passe réellement là-bas...
OriginalL'auteur thevan | 2014-04-03
Vous devez vous connecter pour publier un commentaire.
Vous devez comprendre le concept Chaque Chien est un Animal, mais pas tous les Animaux sont des Chiens.
Program
est un nom terrible, débarrassons-nous de qui et de le rendrePomeranian
: maintenant, tout sera clair.mais vous pouvez effectuer les opérations suivantes
J'espère que cette aide.
OriginalL'auteur Sriram Sakthivel
Vous ne pouvez pas créer une instance de parent à partir du type de l'enfant . Il viole le concept d'héritage .
OriginalL'auteur Shoaib Raza
Une Poméranie est un Chien, mais un Chien n'est pas nécessairement un Poméranien. C'est vrai dans la vraie vie et le vrai lorsque votre orientée objet classes correctement hériter les uns des autres. Dans la vraie vie, vous faire un test ADN sur un chien pour vérifier que c'est un Poméranien. Dans l' .NET Framework, nous avons des fonctions et des opérateurs nous aider avec ce.
Disons que vous savez que votre exemple d'un
Dog
est en fait unPomeranian
. Vous pouvez effectuer un cast explicite.Vous voulez être positif que l'instance est en fait du type de casting, pour éviter les exceptions. Une façon de le faire est de faire usage de
GetType()
ettypeof()
.Une autre méthode consiste à utiliser le
opérateur.
À l'aide de l'opérateur est essentiellement équivalent à ce...
Évidemment, quand tout votre code est le même bloc, il est facile de dire le type sous-jacent par eyeballing. Mais quand vous commencez à utiliser le générique de collections et d'autres trucs comme ça et vous êtes de passage entre les classes, parfois vous ne savez pas ce que le type soit, et c'est lors de la vérification du type devient important avant de couler.
Voir Casting et les Conversions de Type sur MSDN.
A Pomeranian is a Dog, but a Pomeranian is not necessarily a Dog
Je pense que tu veux direbut a Dog is not necessarily a Pomeranian
Bonne prise!
OriginalL'auteur mason
Vous ne pouvez pas obtenir un
Program
à partir d'unDog
depuisProgram
sous-classesDog
.Mais avec le polymorphisme, un
Program
est unDog
, mais pas l'inverse.OriginalL'auteur Daniel A. White