是否可以定义 class 对隐式转换尝试的响应?

Is it possible to define a class's response to implicit casting attempts?

对于我的 class foo,如果我尝试这样做:

public foo ClassName = new foo();
public string MyString = ClassName;

我会得到一个明显的错误,因为 ClassName 不是字符串。

在这种情况下,有没有办法强制 class 的行为?大致如下:

WhenCalledAsString {return self.ToString()}

是的,您应该实施 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;

您可以覆盖 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!
}

这就是你想要的:

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 个值!