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中的可选变量吗?
从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