5

我有一个复杂的对象类型,我正在覆盖“base.ToString()”方法,以便它返回一个字符串属性值。

例如:

class foo
{
 public string StringValue{get;set;}
 public int SomeOtherValue{ get;set;}
 public override ToString()
 {
   return StringValue;
 }
}

因此,这使我可以轻松地使用检索 StringValue 属性的值。

有没有一种方法可以覆盖或扩展基本功能,以便我可以使用下面的简单代码来设置StringValue属性?

foo aFoo = new foo();
aFoo = "Some string value";
4

5 回答 5

10

您可以使用隐式转换运算符重载:http: //msdn.microsoft.com/library/z5z9kes2.aspx

于 2013-09-13T09:00:20.050 回答
7

您不能重载 = 运算符,如此处所述

有关可覆盖运算符的完整列表,请参阅此页面。

于 2013-09-13T08:59:33.470 回答
3

不,这是不可能的。赋值运算符不可重写,这是有充分理由的。

即使在 C# 和现代面向对象编程语言的范围内,开发人员也经常“滥用”系统以使其做不应该做的事情。如果您可以赋予与将变量引用值传递给赋值运算符不同的含义,请考虑一下当没有经验的开发人员使用它时会造成的混乱。

可以做的是提供允许您的对象从字符串中获取其值的方法,如下所示:

afoo.TakeValuesFrom("Some string value");

或者

MyThingy afoo = MyThingy.FromString("Some string value");

这与您所要求的几乎相同,并且完全合法且可读。

于 2013-09-13T09:01:17.750 回答
-1

你不能。它是 C# 语言规范的受保护部分。能够超越这一点就像超越你的身体用呼吸水呼吸空气的能力。

于 2013-09-13T09:06:15.487 回答
-1

使用隐式转换运算符。它将完全满足您的需要

于 2019-09-17T23:00:09.480 回答