如何定义一个可以接受不同参数序列的方法
本文关键字:参数 方法 定义 何定义 一个 | 更新日期: 2023-09-27 18:28:39
在C#、Python和/或VB.NET中,如何编写一个可以接受不同参数序列的类的方法?作为一种指示,在Visual Studio中按shift+shift+space时,可以访问参数序列的多选。
您必须创建多个具有相同名称和不同参数的方法(称为重载方法):
public int myMethod(String someString){
//code
}
public int myMethod(int someInt){
//code
}
在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
)和零个或多个关键字参数(**kwargs
)。这意味着您可以按如下方式调用method2
:
>>> e = Example()
>>> e.method2(1, 2, 3)
1 2 3 {}
>>> e.method2(1, 2, 3, key='value')
1 2 3 {'key': 'value'}
我试图在方法重载和变量参数数方面更加明确。您可以在相同的interface
、class
或struct
中使用相同名称的不同方法,只要它们在C#和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 });
您还可以使用.Net 4的命名和可选参数功能:http://msdn.microsoft.com/en-us/library/dd264739.aspx?ppud=4
public void myMethod(object requiredParam, object optionalParam = null,
int optionalInt= 0)
{
}
在这个方法中,您必须拥有的唯一参数是第一个。如果未提供其他两个值,则它们将默认为提供的值。
如果参数的类型不同,则可以重载方法
或者,您可以只传入一个指示参数序列的值,并在方法中设置相应的逻辑来处理它。