如何定义一个可以接受不同参数序列的方法?

时间:2012-03-21 20:10:34

标签: c# python vb.net visual-studio

在C#,Python和/或VB.NET中,我如何编写一个可以接受不同参数序列的类方法?作为指示,当在Visual Studio中按shift + shift + space时,可以访问参数序列的多个选项。

5 个答案:

答案 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至少有三个参数(arg0arg1arg2)以及零个或多个关键字参数({{ 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#中具有不同数量的参数或不同类型(或两者)的参数,您可以在同一interfaceclassstruct中使用相同名称的不同方法和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)

如果参数的类型不同,则可能会重载方法

或者,您可以传入一个指示参数序列的值,并在方法中使用逻辑来相应地处理它。