返回 HelpText class 而不是字符串意外地工作

Returning HelpText class instead of string works unexpectedly

我正在使用 CommandLine Parser API 来处理我的应用程序的命令行参数。

sample page中有一段代码:

 [HelpOption]
  public string GetUsage() {
    return HelpText.AutoBuild(this, (HelpText current) => HelpText.DefaultParsingErrorsHandler(this, current));
  }

编译

但是,实际上 HelpText.AutoBuild() 的 return 值是 HelpText 实例,它直接继承对象。 而且,据我所知,字符串是一个密封的class,不能被继承。

怎么会这样?

这种魔法是由implicit operator stringSee MSDN)创造的。 HelpTextclass肯定有一个


示例用法:

public class A 
{
      ......
   public override String ToString() 
   {
        return "AAA" ; 
   }

   public static implicit operator string (A a) 
   {
        return a.ToString() ; 
   }
} 

它允许你做这样的事情:

string aString = new A() ;  // new A().ToString() is called by the implicit operator

当然,您可以这样做:

public string MethodMan() 
{
     return new A(); 
}