c#空可选参数

时间:2011-12-22 16:32:24

标签: c# types polymorphism nullable optional-parameters

例如:

void building(int doors, bool multi_story) {...}
or
void building(int doors = 1, bool multi_story = false) {...}

因此:

new building(4, true);
new building(1, false);
or
new building(doors: 4, multi_story: true);
new building();

这些东西适用于可空的'类型?'同样。但是,做到这一点会很高兴。

new building(doors: 4, multi_story:); // thanks SLaks for the correction

意思是“一切都是默认的,除了 - >有4个门,是多层的”。删除一个单词“true”只是一个小问题,但可以模拟这个吗?

3 个答案:

答案 0 :(得分:2)

没有; C#不支持这样的语法。

如果您有一个名为multi_story的本地变量?

会发生什么

答案 1 :(得分:0)

你可以写:

new building(doors: 4); 

甚至:

new building(4); 

如果未指定参数,则默认为其指定的默认值。因此multi_storyfalse。{{1}}

答案 2 :(得分:0)

只要函数的签名各不相同,您就可以创建多个具有相同名称的函数/方法。

e.g。

public void building() {...}
public void building(int doors) {...}
public void building(bool multiStory) {...}
public void building(int doors, bool multiStory) {...}

对于上面的第一个,我要做的是:

public void building()
{
    building(1); // call building passing default doors
}
public void building(int doors)
{
    building(doors, true); // call the building function passing the default story flag
}
public void building(bool multiStory)
{
    building (1, multiStory); // Call building function passing default doors and ms flag
}
public void building(int doors, bool multiStory)
{
    //final building function - deal with doors & story arguments.
}

请注意,您可以使用类对象的构造函数执行此类操作,使用“this”关键字调用下一个构造函数:

void building() : this(1) {}
void building(int doors) : this(doors, true) {}
void building(bool multiStory) :this(1, multiStory) {}
void building(int doors, bool multiStory){
    //do stuff
}