是否可以在C#中覆盖赋值“=”

时间:2013-09-13 08:57:23

标签: c#

我有一个复杂的对象类型,我将覆盖" 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";

5 个答案:

答案 0 :(得分:7)

您不能按照所述here

重载=运算符

有关可覆盖运算符的完整列表,请参阅this page

答案 1 :(得分:3)

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

答案 2 :(得分:1)

不,这是不可能的。赋值运算符不可覆盖,并且有充分的理由。

即使在C#和现代面向对象编程语言的范围内,开发人员也常常“滥用”系统,使其做不应该做的事情。如果你可以指定一个不同的含义,而不是将一个参数值传递给赋值运算符,那么考虑一下在没有经验的开发人员使用它时会产生的混乱。

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

afoo.TakeValuesFrom("Some string value");

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

这几乎与你提出的要求相同,而且完全合法且可读。

答案 3 :(得分:0)

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

答案 4 :(得分:-1)

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