在C#,Python和/或VB.NET中,我如何编写一个可以接受不同参数序列的类方法?作为指示,当在Visual Studio中按shift + shift + space时,可以访问参数序列的多个选项。
答案 0 :(得分:2)
您必须创建具有相同名称和不同参数的多个方法(称为重载方法):
public int myMethod(String someString){
//code
}
public int myMethod(int someInt){
//code
}
答案 1 :(得分:2)
在Python中,您可以使用*args
(用于位置参数)和**kwargs
(用于命名参数)来捕获传递给方法的所有参数:
class Example:
def method(self, *args, **kwargs):
print args, kwargs
def method2(self, arg0, arg1, arg2, **kwargs):
print arg0, arg1, arg2, kwargs
这给出了:
>>> e = Example()
>>> e.method(1, 2, 3, key='value')
(1, 2, 3) {'key': 'value'}
>>> e.method(1, 2, key1='value1', key2='value2')
(1, 2) {'key2': 'value2', 'key1': 'value1'}
在Example
中,方法method2
至少有三个参数(arg0
,arg1
和arg2
)以及零个或多个关键字参数({{ 1}})。这意味着您可以按如下方式致电**kwargs
:
method2
答案 2 :(得分:1)
您还可以使用.Net 4的命名和可选参数功能: http://msdn.microsoft.com/en-us/library/dd264739.aspx?ppud=4
public void myMethod(object requiredParam, object optionalParam = null,
int optionalInt= 0)
{
}
在这种方法中,你必须拥有的唯一参数是第一个。如果没有提供,则另外两个将默认为提供的值。
答案 3 :(得分:1)
我尝试在方法重载和变量参数号上更加明确。只要在C#中具有不同数量的参数或不同类型(或两者)的参数,您可以在同一interface
,class
或struct
中使用相同名称的不同方法和VB。 C#示例:
public int Foo(string s) // OK, first method
public int Foo(double d) // OK, different type
public void Foo(double x) // Error, same parameter type, return
// type and parameter name do not matter.
public int Foo(string s, DateTime d) // OK, diffent number of parameters.
此外,最后一个参数可以是一个数组,表示不同数量的参数。必须使用params
关键字(C#)或ParamArray
关键字(VB)引入它。
C#
public int Foo(string s, params int[] n)
VB
Function Foo(ByVal s As String, ByVal ParamArray n As Integer()) As Integer
你可以这样称呼它,C#
int i = Foo("Hello");
int i = Foo("Hello", 5);
int i = Foo("Hello", 5, 7);
int i = Foo("Hello", 5, 7, 13);
int i = Foo("Hello", new int[] { 2, 4, 6 });
答案 4 :(得分:0)
如果参数的类型不同,则可能会重载方法
或者,您可以传入一个指示参数序列的值,并在方法中使用逻辑来相应地处理它。