2010-10-29 11 views
2

Convertir une classe en interface est la même que convertir une classe en une autre classe en C# La boîte ou le déballage se produit-il dans ce processus?C# Convertir les interfaces

interface Area 
{ 
    string TxtArea 
    { 
    get; 
    set; 
    } 
} 

Convertir interfacer:

public void Test() 

    { 
     ExternArea extArea = new ExternArea(); 
     if(extArea is Area) 
     { 
     ((Area)extArea).TxtArea = "voila"; 
     } 
    } 
+0

Il est de bonne pratique (à mon humble avis) de commencer les noms d'interface avec «je». – nothrow

Répondre

10

En supposant ExternArea est une classe plutôt que d'un type de valeur (struct ou ENUM), il n'y a pas de boxe impliqué. Boxing seulement ever convertit un type de valeur en instance de type référence.

Notez que l'utilisation as est généralement préféré que:

Area area = extArea as Area; 
if (area != null) 
{ 
    area.TxtArea = "voila"; 
} 
+0

Est-ce que la première ligne jette une exception si extArea doenst hérite de l'interface Area? – ozsenegal

+2

@user Non, la zone est définie sur null –

2

boxe se produit uniquement si vous convertissez un type de valeur (un struct ou plusieurs) à un type de référence (object ou une interface mis en œuvre par

Coulée d'un type de référence (instance d'une classe) vers un type de référence différent d par la classe) n'implique pas la boxe.

Même ainsi, you should not cast unnecessarily; à la place, utilisez le mot-clé as, comme ceci:

Area area = extArea as Area; 
if (area != null) 
{ 
    area.TxtArea = "voila"; 
} 
+0

+1 Pour fournir le lien –

0

boxe et unboxing ont à voir avec l'emballage d'un type de valeur à l'intérieur d'un objet, il peut donc être utilisé comme un type de référence (attribué sur le tas) . Lorsque vous déballez, vous récupérez une telle valeur dans la "boîte". Donc non, cela ne se produirait pas dans cet exemple.

0

Tant que l'objet ExternArea dans votre exemple de code est un type de référence, alors - non - aucune opération de boxe ne sera effectuée. Boxe et unboxing se réfère aux opérations entreprises lorsque les types de valeur sont convertis en objets. Pour plus d'informations, veuillez consulter Boxing and Unboxing (C# Programming Guide).