2011-11-01 1 views
3

quelqu'un peut-il me donner un exemple de conversion de type implicite dans la vie réelle. Je sais que la conversion de type implicite signifie la conversion de la classe dérivée à la classe de base, mais je ne sais pas comment l'afficher en codage dans C#. Je ne veux pas le définir en 2 lignes. Je veux définir un programme complet pour montrer la conversion de type implicite et explicite dans C#. Aidez-moi, s'il vous plaît.S'il vous plaît donnez-moi un exemple de conversion de type implicite et explicite en C#

Cordialement

+1

Ce lien est utile pour la conversion de type et des exemples: http://msdn.microsoft.com/fr-fr/library/ms173105.aspx – AndrewC

Répondre

12

Non, conversion de type implicite signifie simplement une conversion de type qui n'a pas besoin d'être explicite dans le code.

LINQ to XML fournit de bons exemples:

// Implicit conversion from string to XNamespace 
XNamespace ns = "http://url.com"; 

XElement element = new XElement("foo", "bar"); 
// Explicit conversion of XElement to string 
string value = (string) element; 

Alors voilà comment ils utilisés - et vous créer vos propres opérateurs de conversion explicites ou implicites en utilisant le type de code affiché dans MSDN (explicit , implicit).

exemple court, complet, mais inutile:

class Foo 
{ 
    private readonly int value; 

    private Foo(int value) 
    { 
     this.value = value; 
    } 

    public static implicit operator Foo(int value) 
    { 
     return new Foo(value); 
    } 

    public static explicit operator int(Foo foo) 
    { 
     if (foo == null) 
     { 
      throw new ArgumentException("foo"); 
     } 
     return foo.value; 
    } 
} 

class Test 
{  
    static void Main(string[] args) 
    { 
     int x = 10; 
     Foo foo = x; 
     int y = (int) foo; 
    } 
} 
0

Construit en types:

byte smallNumber = 255; 

// byte implicitly casted to int 
int num = smallNumber; 

// explicitly cast byte to int 
num = (int)smallNumber; 

types personnalisés:

public abstract class AnimalBase 
public sealed class Tiger : AnimalBase 

Tiger tiger = new Tiger(); 

// explicit (but really does not required to be specified) 
AnimalBase anotherAnimal = (AnimalBase)tiger; 

// implicit Tiger to AnimalBase 
AnimalBase anotherAnimal = tiger; 
1

Implicite (Ceci est juste un exemple, il y a d'autres situations où le type est implicitement converti. D'un objet)

int f(Animal a) {...} 

Elephant e; // Elephant is-a Animal 
f(e); 

Explicite

int f(Animal a) {...} 

Alien someAlien; // Alien is-not-a Animal 
f((Animal)someAlien); // Works only if conversion from Alien to Animal is user-defined. 

probablement la partie la plus intéressante de ma réponse sera de vous dire de se référer à Casting and Type Conversions (C# Programming Guide) pour une explication complète des différents types de conversions en C#, et d'autre part à Conversion Operators (C# Programming Guide).

1

La conversion de type implicite et explicite en C# est similaire à C++ et à d'autres langages OOP.

Si la conversion n'entraîne pas de dataloss, la conversion se produit automatiquement. Rien d'autre a besoin d'être fait .:

int i = 10; 
double j = 20.1; 

j = i; 

// j = 10. 

si la conversion entraînera dataloss, vous devez indiquer explicitement le type que le sujet sera converti en:

int i = 10; 
double j = 20.1; 

i = (int) j; 

// i = 10 

Ceci est l'exemple le plus élémentaire , d'autres conversions se produiront lorsque vous travaillez sur des objets cast en fonction de leur arbre d'héritage ...

+1

Notez qu'il y a un petit nombre de ** données perdues ** impli conversions cit. La conversion du long au double, par exemple, est * perte de données * mais pas * perte de magnitude *. –

Questions connexes