Можно ли переопределить возврат объекта в C #? - PullRequest
0 голосов
/ 30 марта 2019

У меня есть класс LiteralObject, и по умолчанию он наследуется от System.Object. Вот как выглядит класс:

    public LiteralObject(Object value)
    {
        this.value = value;
    }
    private Object value;
    public Object getValue() { return value; }

Чтобы получить значение объекта LiteralObject:

LiteralObject x = new LiteralObject(23);
Console.WriteLine(x.getvalue());

То, что я хочу, это:

LiteralObject x = new LiteralObject(23);
Console.WriteLine(x);

Есть ли способ переопределить возвращение объекта System.Object? или есть другой способ получить то, что я хочу? Кстати, переопределение ToString () не является решением, которое я ищу. И объект, переданный в конструктор, того же типа, что и его родительский / базовый класс

1 Ответ

2 голосов
/ 30 марта 2019

Вы можете сделать это, используя неявные операторы приведения.Однако он не работает на object, поскольку вы не можете выполнить неявное преобразование на object (или любом другом классе предков).Чтобы обойти это, мы можем использовать дженерики:

class LiteralObject<T>
{
    public LiteralObject(T initialValue)
    {
        this.value = initialValue;
    }
    private T value;

    public T getValue()
    { 
        return value; 
    }

    static public implicit operator T(LiteralObject<T> source)
    {
        return source.getValue();
    }
}

public class Program
{
    public static void PrintInteger(int i)
    {
        Console.WriteLine("{0}", i);
    }
    public static void Main()
    {
        var o = new LiteralObject<int>(23);
        PrintInteger(o);
    }
}

Вывод:

23

Пример на DotNetFiddle

...