Looking for c# Keywords? Try Ask4Keywords

C# Language Операторы преобразования


пример

В C # типы могут определять пользовательские операторы преобразования , которые позволяют преобразовывать значения в другие типы и из других типов с использованием явных или неявных отбросов. Например, рассмотрим класс, предназначенный для представления выражения JavaScript:

public class JsExpression
{
    private readonly string expression;
    public JsExpression(string rawExpression)
    {
        this.expression = rawExpression;
    }
    public override string ToString()
    {
        return this.expression;
    }
    public JsExpression IsEqualTo(JsExpression other)
    {
        return new JsExpression("(" + this + " == " + other + ")");
    }
}

Если бы мы хотели создать JsExpression, представляющее сравнение двух значений JavaScript, мы могли бы сделать что-то вроде этого:

JsExpression intExpression = new JsExpression("-1");
JsExpression doubleExpression = new JsExpression("-1.0");
Console.WriteLine(intExpression.IsEqualTo(doubleExpression)); // (-1 == -1.0)

Но мы можем добавить некоторые явные операторы преобразования в JsExpression , чтобы обеспечить простое преобразование при использовании явного литья.

public static explicit operator JsExpression(int value)
{
    return new JsExpression(value.ToString());
}
public static explicit operator JsExpression(double value)
{
    return new JsExpression(value.ToString());
}

// Usage:
JsExpression intExpression = (JsExpression)(-1);
JsExpression doubleExpression = (JsExpression)(-1.0);
Console.WriteLine(intExpression.IsEqualTo(doubleExpression)); // (-1 == -1.0)

Или мы могли бы сменить эти операторы на неявные, чтобы сделать синтаксис намного проще.

public static implicit operator JsExpression(int value)
{
    return new JsExpression(value.ToString());
}
public static implicit operator JsExpression(double value)
{
    return new JsExpression(value.ToString());
}

// Usage:
JsExpression intExpression = -1;
Console.WriteLine(intExpression.IsEqualTo(-1.0)); // (-1 == -1.0)