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是一个密封类,不能继承.
怎么会这样?
这种魔术是由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)