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

本文关键字:赋值 覆盖 是否 | 更新日期: 2023-09-27 18:31:13

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

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

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

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

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

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

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

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

afoo.TakeValuesFrom("Some string value");

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

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

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