是否可以在 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";
可以使用隐式强制转换运算符重载: http://msdn.microsoft.com/library/z5z9kes2.aspx
您不能重载 = 运算符,如此处所述
有关可覆盖运算符的完整列表,请参阅此页面。
不,这是不可能的。赋值运算符不可重写,这是有充分理由的。
即使在C#和现代面向对象编程语言的范围内,开发人员也经常"滥用"系统来使其做不应该做的事情。如果可以分配与将变量的引用值传递给赋值运算符不同的含义,请考虑一下没有经验的开发人员使用它时会产生的混乱。
您可以做的是提供允许对象从字符串中获取其值的方法,如下所示:
afoo.TakeValuesFrom("Some string value");
或
MyThingy afoo = MyThingy.FromString("Some string value");
这几乎与您所要求的相同,并且完全合法且可读。
不,你不能。它是 C# 语言规范的受保护部分。能够克服这一点就像用呼吸的水覆盖你的身体呼吸空气的能力一样。