使用值替代对象类型
本文关键字:对象 类型 | 更新日期: 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
。