对于我的班级foo
,如果我尝试这样做:
public foo ClassName = new foo();
public string MyString = ClassName;
我会收到一个明显的错误,因为ClassName不是字符串。
在这种情况下,是否有办法强制类的行为?类似于:
WhenCalledAsString {return self.ToString()}
答案 0 :(得分:3)
是的,您应该实现implict operator
,例如:
public class foo {
....
public static implicit operator string(foo value) {
if (null == value)
return null;
//TODO: put relevant code here, e.g. value.ToString()
return "it's a foo class!";
}
}
那你可以放
public foo ClassName = new foo();
// "it's a foo class!";
public string MyString = ClassName;
答案 1 :(得分:1)
您可以覆盖ToString
并定义一个隐式运算符,如下所示:
public class foo
{
public static implicit operator string(foo f)
{
return f.ToString();
}
public override string ToString()
{
return "hello!";
}
}
然后像这样称呼它:
public static foo ClassName = new foo();
public static void Main()
{
string MyString = ClassName;
Console.WriteLine(MyString); // hello!
}
答案 2 :(得分:0)
这就是您想要的:
class Program
{
static void Main(string[] args)
{
Pizza pizza = new Pizza();
string test = pizza;
}
}
public class Pizza
{
public static implicit operator string(Pizza pizza)
{
return pizza?.ToString();
}
}
输出:
Namespace.Pizza
编辑后的旁注:
它甚至支持null
个值!