使用值替代对象类型

本文关键字:对象 类型 | 更新日期: 2024-09-20 19:36:49

我有一个接收和返回字符串的库(我想创建无限的数字,但我正在简化解释)。

我有一个带有运算符重载和更多源代码的库,但当我使用库时:

MyType foo = new MyType("10");
MyType bar = foo + foo;
Console.WriteLine("{0}", bar.GetType());
Console.WriteLine("{0}", bar);
Console.WriteLine("{0}", bar.Value); // Redundant: the property "Value" has the value as string

输出为:

MyNamespace.MyType
MyNamespace.MyType // The object "bar" returns the object type
10

好吧,但我想只使用对象名称"bar"来获得"10"(bar.Value):

Console.WriteLine("{0}", bar);
// I want the next output: 10

我尝试在库中使用GetType()进行更改(我发现它不可能覆盖GetType(()):

public new string GetType()
{
    return this.Value;
}

但这只适用于"bar.GetType()",而不适用于"bar"。

我认为这在C#中是不可能的。

使用值替代对象类型

这可以通过重写Object.ToString():轻松完成

class MyType
{
    public string Value { get; set; }
    public override string ToString() { return this.Value; }
}

测试:

MyType m = new MyType("10");
Console.WriteLine(m);

打印10

说明:当调用WriteLine时,会调用类´ToString-方法。如果此方法未在类型中重写,则使用object的默认实现,该实现将简单地返回类´类型,在您的情况下为MyNamespace.MyType