我有一个接收并返回字符串的库(我想创建无限数字,但我简化了解释)。
我的库有运算符重载和更多源代码,但是当我使用库时:
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
好吧,但我想获得" 10" (bar.Value)仅使用对象名称" bar":
Console.WriteLine("{0}", bar);
// I want the next output: 10
我尝试使用库中的GetType()进行更改(我发现它不可能覆盖GetType()):
public new string GetType()
{
return this.Value;
}
但这仅适用于" bar.GetType()"而不是" bar"。
我认为在C#中是不可能的。
答案 0 :(得分:3)
这可以通过覆盖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
。
Explenataion:调用WriteLine
时调用类ToString
- 方法。如果在类型中未覆盖此方法,则使用object
的默认实现,这将简单地返回类的类型,在您的情况下为MyNamespace.MyType
。