是否可以覆盖C#中Object的返回?

时间:2019-03-30 04:48:11

标签: c# object return

我有一个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 个答案:

答案 0 :(得分:2)

您可以使用隐式强制转换运算符来实现。但是,由于您无法在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

Example on DotNetFiddle