C#中的隐式类型转换

时间:2014-02-07 18:57:20

标签: c# c++

我正在将C ++程序移植到C#。我刚开始学习C#。

在C ++中,如果我使用字符串参数

定义构造函数
class ProgramOption { public: ProgramOptions(const char* s=0); };

然后我可以在ProgramOptions的位置使用string参数,例如

int myfucn(ProgramOption po);
myfunc("s=20;");

我也可以将它用作默认参数,例如

int myfunc(ProgramOption po=ProgramOption());

不幸的是在C#中,即使我有

class ProgramOption { public ProgramOptions(const char* s=0) {...} }

我发现我不能将它用作默认参数,

int myfunc(ProgramOption po=new ProgramOption());

我没有显式转换就无法传递字符串文字,例如

myfunc("s=20");

这在C#中根本不可能,或者我可以实现一些方法来实现它吗?感谢

2 个答案:

答案 0 :(得分:6)

您需要定义隐式强制转换运算符。像这样:

class ProgramOption
{
    //...

    public ProgramOptions(string str = null)
    {
        //...
        if (!string.IsNullOrWhiteSpace(str))
        {
            /* store or parse str */
            //...
        }
    }

    //...

    public static implicit operator ProgramOptions(string str)
    {
        return new ProgramOptions(str);
    }
}

然后允许你拥有这样的功能:

int myfunc(ProgramOption po = null)
{
    po = po ?? new ProgramOptions(); //default value
    //...
}

并称之为:

myfunc("some text");

答案 1 :(得分:1)

来自Does C# have default parameters?

  

在C ++等语言中,默认值可以作为方法声明的一部分包含在内:
  void Process(员工员工,bool bonus = false)
  ...
  C#没有此功能。

但也

  

更新:
  从C#4.0开始可以使用命名和可选(默认)参数。

Named and Optional Arguments

  

Visual C#2010引入了命名和可选参数。 ...可选参数使您可以省略某些参数的参数。

以后

  

可选参数
   - 一个恒定的表达;
   - 新形式ValType()的表达式,其中ValType是值类型,例如枚举或结构;
   - 表单default(ValType)的表达式,其中ValType是值类型。