explicite et implicite c#

je suis nouveau à C# et j'apprends de nouveaux mots. J'ai du mal à comprendre ce que ces deux mots signifient quand il s'agit de programmer c#. J'ai cherché dans le dictionnaire la signification et voici ce que j'ai obtenu:

implicite

"quelque Chose qui est implicite est exprimé d'une manière indirecte."

" si une qualité ou un élément est implicite dans quelque chose, il y est impliqué ou est indiqué par elle;"

explicite

"quelque Chose qui est explicite est exprimé ou indiqué clairement et ouvertement, sans tenter de cacher quoi que ce soit"

" si vous êtes explicite à propos de quelque chose, vous en parlez très ouvertement et clairement."

j'aimerais comprendre en C#.

Merci pour votre aide.

Cheers


informations supplémentaires:

Voici une partie de la phrase dans le livre ce que je suis en train de lire qui a ce mot" implicite "

"Cela signifie que la Zone et les Occupants à l'intérieur de AreaPerPerson( ) implicitement consulter les copies de ces variables dans l'objet qui appelle AreaPerPerson( ) "

je suis assez d' Je ne comprends pas ce que cette phrase essaie de dire.

48
demandé sur Joey 2009-07-24 13:39:57

7 réponses

les mots clés implicit et explicit sont utilisés pour déclarer les opérateurs de conversion. Disons que vous avez la classe suivante:

public class Role
{
    public string Name { get; set; }
}

si vous voulez créer un nouveau Role et lui assigner un Name , vous le ferez typiquement comme ceci:

Role role = new Role();
role.Name = "RoleName";

Puisqu'il n'a qu'une seule propriété, il serait peut-être préférable que nous puissions faire comme ceci:

Role role = "RoleName";

cela signifie que nous voulons implicitement convertir une chaîne en une Role (puisqu'il n'y a pas de casting spécifique impliqué dans le code). Pour ce faire, nous ajoutons un opérateur de conversion implicite:

public static implicit operator Role(string roleName)
{
    return new Role() { Name = roleName };
}

une autre option consiste à implémenter un opérateur de conversion explicite:

public static explicit operator Role(string roleName)
{
    return new Role() { Name = roleName };
}

dans ce cas, nous ne pouvons pas transformer implicitement une chaîne en une Role , mais nous devons le mettre dans notre code:

Role r = (Role)"RoleName";
101
répondu Fredrik Mörk 2009-07-24 09:47:56

en général

  • implicite: quelque chose est fait pour vous automatiquement.
  • explicite: vous avez écrit quelque chose dans le code source pour indiquer ce que vous voulez qu'il arrive.

par exemple:

int x = 10;
long y = x; // Implicit conversion from int to long
int z = (int) y; // Explicit conversion from long to int

implicite et explicite sont utilisés assez souvent dans des contextes différents, mais le sens général sera toujours dans ce sens.

noter que parfois les deux peuvent se rencontrer. Par exemple:

int x = 10;
long y = (long) x; // Explicit use of implicit conversion!

(une conversion explicite est une conversion qui a à indiquer explicitement; une version implicite est une version qui peut à utiliser implicitement, c'est-à-dire sans que le code ait à l'indiquer.)

51
répondu Jon Skeet 2009-07-24 09:55:32

Considérez que vous avez deux classes:

internal class Explicit
{
    public static explicit operator int (Explicit a)
    {
        return 5;
    }
}


internal class Implicit
{
    public static implicit operator int(Implicit a)
    {
        return 5;
    }
}

et deux objets:

var obj1 = new Explicit();
var obj2 = new Implicit();

vous pouvez maintenant écrire:

int integer = obj2; // implicit conversion - you don't have to use (int)

ou:

int integer = (int)obj1; // explicit conversion

mais:

int integer = obj1; // WON'T WORK - explicit cast required

conversion implicite est destiné à être utilisé lorsque la conversion ne perd aucune précision. Conversion explicite signifie que vous pouvez perdre un peu de précision et doit indiquer clairement que vous savez ce que vous êtes faire.

il y a aussi un second contexte dans lequel des termes implicites/explicites sont appliqués - la mise en œuvre de l'interface. Il n'y a pas de mots clés dans cette affaire.

internal interface ITest
{
    void Foo();
}

class Implicit : ITest
{
    public void Foo()
    {
        throw new NotImplementedException();
    }
}

class Explicit : ITest
{
    void ITest.Foo() // note there's no public keyword!
    {
        throw new NotImplementedException();
    }
}

Implicit imp = new Implicit();
imp.Foo();
Explicit exp = new Explicit();
// exp.Foo(); // won't work - Foo is not visible
ITest interf = exp;
interf.Foo(); // will work

Ainsi, lorsque vous utilisez l'implémentation explicite de l'interface, les méthodes de l'interface ne sont pas visibles lorsque vous utilisez le type de béton. Cela peut être utilisé lorsque l'interface est une interface d'aide, ne fait pas partie de la responsabilité première de classe et vous ne voulez pas de méthodes supplémentaires pour induire quelqu'un en erreur en utilisant votre code.

9
répondu maciejkow 2009-07-24 09:53:43

je pense ce lien , il est assez clair qu'une conversion implicite est - il un endroit où vous n'avez pas besoin de convertir explicitement la valeur dans une tâche. Donc, au lieu de faire

myDigit = (Digit) myDouble 

...vous pouvez simplement faire:

myDigit = myDouble;
2
répondu Gary McGill 2009-07-24 09:44:40

être explicite en C#, c'est surtout montrer ses intentions clairement et sans ambiguïté.

par exemple:

class MyClass
{
    string myField;

    void MyMethod(int someNumber)
    {

    }
}

dans le code ci-dessus, la visibilité de la classe, du champ et de la méthode est implicite. Ils utilisent le compilateur par défaut.

maintenant, je ne peux jamais me rappeler ce que sont les valeurs par défaut du compilateur, et peut-être que vos collègues ne peuvent pas non plus, donc plutôt que de compter sur tout le monde se rappeler ce que sont les valeurs par défaut, vous pouvez être explicite.

public class MyClass
{
    private string myField;

    public void MyMethod(int someNumber)
    {
    }
}
1
répondu Colin Mackay 2009-07-24 09:44:07

implicite peut être considéré comme implicite, mais explicite signifie que vous déclarez qu'il doit être fait vous-même. Comme avec des plâtres. Voici un casting implicite:

int implicit;
implicit = 7.5;

la valeur '7.5' sera implicitement coulée comme un int. Cela signifie que le compilateur le fait pour vous.

ici est explicite:

int explicit;
explicit = (int)7.5;

ici vous dites au compilateur que vous voulez le lancer. Vous déclarez explicitement la conversion. Espérons que cela aide. Source: http://cboard.cprogramming.com/cplusplus-programming/24371-implicit-explicit.html

0
répondu Roque Mejos 2016-08-17 01:28:35

C'est une grande ressource pour l'apprentissage du C#: http://www.functionx.com/csharp/

regardez ici spécifiquement: http://www.functionx.com/csharp/math/Lesson20.htm

-1
répondu Andrew Siemer 2009-07-24 09:45:42