C#中可选(VB)参数的替代方案?

0 c# vb6 com com-interop optional-variables

我被告知在C#中没有可选参数这样的东西.但是您可以使用重载功能并使用默认值输入变量,例如:

void Person(string name, int age)
void Person(string name)
Run Code Online (Sandbox Code Playgroud)

void Person(string name, int age = 30)
Run Code Online (Sandbox Code Playgroud)

我的问题是,当从VB6调用C#组件时,重载方法往往会将名称更改为例如"Person(字符串名称),Person _1(字符串名称,int age)"等,并且当使用时不能使用具有默认值的变量"出"变量.

但是怎么样

void Person(string name, [Optional] int age)
Run Code Online (Sandbox Code Playgroud)

??

有人可以向我解释这项工作是如何使用它来模拟VB6中的可选变量吗?

Ada*_*rth 6

从C#4开始,有可选的参数支持:

public void MyMethod(bool arg = false)
{

}
Run Code Online (Sandbox Code Playgroud)

不知道如何从VB6调用它.

另一种可能的方法是将参数包装在另一个类中:

public class PersonSettings
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public Person(PersonSettings settings)
{

}
Run Code Online (Sandbox Code Playgroud)

然后,您有一个参数,可以PersonSettings根据需要在类中默认值.

当然,您建议的使用OptionalAttribute也应该适合您.虽然我认为你需要摆脱重载的方法,或者使用一个接口只向COM公开其中一个方法:

http://social.msdn.microsoft.com/Forums/en/clr/thread/048c0104-20ed-49af-a221-ddadb081989e