2012-03-21 83 views
0

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

+1

仅供参考,这是在名称相同,但采取不同的参数的方法被称为*超载方法*。 – 2012-03-21 20:28:05

回答

1

我尽量对方法重载和可变参数号位更加明确。只要在C#和VB中具有不同数量的参数或不同类型的参数(或两者),就可以在同一个interfaceclassstruct中使用相同名称的不同方法。 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 }); 
2

你必须创建具有相同的名称和不同的参数多种方法(称为重载的方法):

public int myMethod(String someString){ 
    //code 
} 

public int myMethod(int someInt){ 
    //code 
} 
0

如果参数是不同类型的,你可以重载方法

另外,你可以传入一个值来指示参数的顺序,并在方法中有相应的逻辑来处理它。

1

您还可以使用.NET 4.0的命名和可选参数功能: http://msdn.microsoft.com/en-us/library/dd264739.aspx?ppud=4

public void myMethod(object requiredParam, object optionalParam = null, 
        int optionalInt= 0) 
{ 
} 

在这种方法中,你必须有是第一个唯一的参数。如果他们没有提供,其他两个将被默认为提供的值。

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,arg1arg2)以及零个或多个关键字参数(**kwargs)。这意味着你可以叫method2如下:

>>> e = Example() 
>>> e.method2(1, 2, 3) 
1 2 3 {} 
>>> e.method2(1, 2, 3, key='value') 
1 2 3 {'key': 'value'} 
相关问题