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

Pab*_*ney 2 c# implicit-conversion

我正在使用CommandLine ParserAPI来处理我的应用程序的命令行参数.

示例页面中,有一段代码:

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

它确实编译.

但是,实际上返回值HelpText.AutoBuild()是HelpText实例,它继承了immediatly对象.而且,AFAIK,string是一个密封类,不能继承.

怎么会这样?

Per*_*t28 5

这种魔术是由implicit operator string(参见MSDN)制作的. HelpText班级肯定有一个.


示例用法:

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

   public static implicit operator string (A a) 
   {
        return a.ToString() ; 
   }
} 
Run Code Online (Sandbox Code Playgroud)

它允许你做这样的事情:

string aString = new A() ;  // new A().ToString() is called by the implicit operator
Run Code Online (Sandbox Code Playgroud)

当然,你可以这样做:

public string MethodMan() 
{
     return new A(); 
}
Run Code Online (Sandbox Code Playgroud)