webentwicklung-frage-antwort-db.com.de

explizite und implizite c #

Ich bin neu in C # und lerne neue Wörter. Ich finde es schwer zu verstehen, was diese beiden Wörter bedeuten, wenn es um die Programmierung von c # geht. Ich habe im Wörterbuch nach der Bedeutung gesucht und hier ist, was ich habe:

implizit

"Etwas, das implizit ist, wird auf indirekte Weise ausgedrückt."

"Wenn eine Qualität oder ein Element implizit in etwas enthalten ist, ist es daran beteiligt oder wird von ihm gezeigt."

Explizit

"Etwas, das explizit ist, wird klar und offen ausgedrückt oder gezeigt, ohne zu versuchen, etwas zu verbergen"

"Wenn Sie sich ausdrücklich auf etwas beziehen, sprechen Sie sehr offen und deutlich darüber."

Ich würde es gerne in C # verstehen.

Danke für Ihre Hilfe. 

Prost


zusätzliche Information:

Hier ist ein Teil des Satzes in dem Buch, was ich jetzt lese, welches dieses Wort "implizit" hat

"Dies bedeutet, dass Area und Insassen in AreaPerPerson( ) implizit auf die Kopien dieser Variablen verweisen, die in dem Objekt gefunden werden, das AreaPerPerson( ) aufruft."

Ich verstehe nicht, was dieser Satz hier zu sagen versucht.

54
tintincutes

Die Schlüsselwörter implicit und explicit in C # werden beim Deklarieren von Konvertierungsoperatoren verwendet. Nehmen wir an, Sie haben folgende Klasse:

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

Wenn Sie eine neue Role erstellen und dieser eine Name zuweisen möchten, tun Sie dies normalerweise wie folgt:

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

Da es nur eine Eigenschaft hat, wäre es vielleicht bequemer, wenn wir es stattdessen so machen könnten:

Role role = "RoleName";

Das heißt, wir wollen implizit eine Zeichenfolge in eine Role konvertieren (da im Code keine bestimmte Besetzung enthalten ist). Um dies zu erreichen, fügen wir einen impliziten Konvertierungsoperator hinzu:

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

Eine weitere Möglichkeit ist die Implementierung eines expliziten Konvertierungsoperators:

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

In diesem Fall können wir eine Zeichenfolge nicht implizit in eine Role konvertieren, aber wir müssen sie in unseren Code umwandeln:

Role r = (Role)"RoleName";
105
Fredrik Mörk

Im Algemeinen

  • Implizit: Es wird automatisch etwas für Sie erledigt.
  • Explizit: Sie haben etwas in den Quellcode geschrieben, um anzugeben, was Sie tun möchten.

Zum Beispiel:

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

Implizit und explizit werden in verschiedenen Kontexten häufig verwendet, aber die allgemeine Bedeutung wird immer in diese Richtung gehen.

Beachten Sie, dass die beiden gelegentlich zusammenkommen können. Zum Beispiel:

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

(Eine explizite Konvertierung ist eine, die muss explizit angegeben werden; eine implizite Version ist eine, die kann implizit verwendet werden, d.

53
Jon Skeet

Betrachten Sie zwei Klassen:

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


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

und zwei Objekte:

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

sie können jetzt schreiben:

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

oder:

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

aber:

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

Implizite Konvertierung soll verwendet werden, wenn die Konvertierung keine Genauigkeit verliert. Explizite Konvertierung bedeutet, dass Sie etwas an Genauigkeit verlieren können und klar sagen müssen, dass Sie wissen, was Sie tun.

Es gibt auch einen zweiten Kontext, in dem implizite/explizite Begriffe angewendet werden - Schnittstellenimplementierung. In diesem Fall gibt es keine Keywords.

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

Wenn Sie eine explizite Schnittstellenimplementierung verwenden, sind die Methoden der Schnittstelle daher nicht sichtbar, wenn Sie einen konkreten Typ verwenden. Dies kann verwendet werden, wenn die Schnittstelle eine Hilfsschnittstelle ist und nicht in die primäre Verantwortung der Klasse fällt und Sie keine zusätzlichen Methoden möchten, um jemanden mit Ihrem Code in die Irre zu führen.

9
maciejkow

Ich denke dieser Link macht ziemlich klar, was eine implizite Konvertierung ist - hier müssen Sie den Wert nicht explizit in eine Zuweisung umwandeln. Also statt zu tun

myDigit = (Digit) myDouble 

... können Sie einfach tun:

myDigit = myDouble;
2
Gary McGill

Um in C # explizit zu sein, müssen Sie Ihre Absichten klar und eindeutig zeigen.

Zum Beispiel:

class MyClass
{
    string myField;

    void MyMethod(int someNumber)
    {

    }
}

Im obigen Code sind die Sichtbarkeit der Klasse, des Feldes und der Methode impliziert. Sie verwenden die Compiler-Standardeinstellungen.

Nun, ich kann mich nie an die Standardeinstellungen des Compilers erinnern, und vielleicht können Ihre Kollegen es auch nicht. Daher müssen Sie sich darauf verlassen, dass sich alle an die Standardeinstellungen erinnern.

public class MyClass
{
    private string myField;

    public void MyMethod(int someNumber)
    {
    }
}
1
Colin Mackay

Implizit kann als implizit betrachtet werden, aber explizit bedeutet, dass Sie angeben, dass es selbst getan werden muss. Wie bei Abgüssen. Hier ist eine implizite Besetzung:

int implicit;
implicit = 7.5;

Der Wert '7.5' wird implizit als int umgewandelt. Das heißt, der Compiler erledigt das für Sie.

Hier ist explizit:

int explicit;
explicit = (int)7.5;

Hier sagen Sie dem Compiler, dass Sie ihn umsetzen möchten. Sie erklären die Konvertierung ausdrücklich. Hoffentlich hilft das. Quelle: http://cboard.cprogramming.com/cplusplus-programming/24371-implicit-explicit.html

0
Roque Mejos