我有一个复杂的对象类型,我将覆盖" 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";
答案 0 :(得分:7)
答案 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)
使用隐式转换运算符。它将完全满足您的需求