c#中隐式类型转换

Implicit type conversion in C#

本文关键字:类型转换      更新时间:2023-10-16

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

在C 中,如果我定义了带有字符串参数的构造函数

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

然后,我可以在programOptions的位置使用字符串参数,例如

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#中是不可能的,还是我可以实现某种方法来实现它?谢谢

您需要定义隐式铸造运算符。这样的东西:

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");

来自c#有默认参数吗?

在诸如C 之类的语言中,可以将默认值作为方法声明的一部分包括在内:
void过程(员工员工,布尔奖金= false)
...
C#没有此功能。

,但也

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

命名和可选参数

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

及以后

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