Frage

Ich weiß, dass ich implizite Konvertierungen mit einer Klasse verwenden können, wie folgt, aber ist es eine Möglichkeit, dass ich eine Instanz bekommen kann eine Zeichenfolge ohne Guss- oder Umwandlung zurück?

public class Fred
{
    public static implicit operator string(Fred fred)
    {
        return DateTime.Now.ToLongTimeString();
    }
}

public class Program
{
    static void Main(string[] args)
    {
        string a = new Fred();
        Console.WriteLine(a);

        // b is of type Fred. 
        var b = new Fred(); 

        // still works and now uses the conversion
        Console.WriteLine(b);    

        // c is of type string.
        // this is what I want but not what happens
        var c = new Fred(); 

        // don't want to have to cast it
        var d = (string)new Fred(); 
    }
}
War es hilfreich?

Lösung

In der Tat wird der Compiler implizit gegossen Fred string aber da Sie die Variable mit var Schlüsselwort deklarieren würden die Compiler keine Vorstellung von Ihrer eigentlichen Absicht haben. Sie könnten Ihre Variable als String deklarieren und der Wert implizit auf String gecastet haben.

string d = new Fred();

Anders gesagt: Sie könnte ein Dutzend implizite Operatoren für verschiedene Arten erklärt. Wie würden Sie die Compiler erwarten, dass zwischen einer von ihnen zu wählen? Der Compiler wird den tatsächlichen Typ standardmäßig wählen, so dass es nicht eine Besetzung überhaupt durchführen müssen.

Andere Tipps

Mit einem impliziten Operator (die Sie haben) sollten Sie nur in der Lage sein zu verwenden:

 string d = new Fred(); 

Sie

var b = new Fred();

sein, vom Typ fred und

var c = new Fred();

vom Typ String sein? Auch wenn die Erklärungen sind identisch?

Wie die anderen Poster erwähnt, wenn Sie einen neuen Fred () deklarieren, wird es vom Typ Fred sein, wenn Sie geben einige Hinweis darauf, dass es sich um eine string sein sollte

Leider ist in dem Beispiel c ist vom Typ Fred. Während Freds können in Strings gegossen werden, schließlich ist c ein Fred. Um d in eine Zeichenfolge zu erzwingen, müssen Sie es sagen, die Fred als String zu werfen.

Wenn Sie wirklich wollen c eine Zeichenfolge sein, warum nicht einfach erklären es als String?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top