在C#中,Python和/或VB.NET中,如何编写可接受不同序列参数的类的方法?作为一个指示,在Visual Studio中按shift + shift +空格时,可以访问参数序列的多个选项。如何定义一个可以接受不同序列参数的方法?
0
A
回答
1
我尽量对方法重载和可变参数号位更加明确。只要在C#和VB中具有不同数量的参数或不同类型的参数(或两者),就可以在同一个interface
,class
或struct
中使用相同名称的不同方法。 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
,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'}
相关问题
- 1. 有一个方法接受不同的对象作为参数
- 2. endl是一种方法,如果它可以接受参数?
- 3. 我可以定义一个.net方法来接受变量定义的参数吗?
- 4. 不包含''的定义,并且没有接受第一个参数类型的扩展方法,可以发现
- 5. scala定义函数的方法接受不同数值类型的列表
- 6. 如何更改方法中的参数以接受不同的类
- 7. 只使用一种方法,接受不同类型的参数
- 8. 同步接受一个Action参数的调用方法
- 9. 如何指定一个参数接受一个自定义脚本cmdlet的
- 10. 如何限制一个方法只接受有一定限制的参数?
- 11. 是否可以编写一个接受不同抽象类型参数的单一方法?
- 12. 如何创建接受可变数量参数的Java方法?
- 13. 单一方法接受3个参数或4个参数
- 14. 接受n个参数的方法C#
- 15. 为什么没有块参数的方法定义接受一个块?
- 16. 如何自定义Haystack的SearchView以接受addtional URL参数?
- 17. 如何接受一个方法的数组列表
- 18. awk可以接受两个参数吗?
- 19. Ruby方法可以接受二维数组作为参数吗?
- 20. 构造函数是否可以接受由前一个参数定义的多个参数?
- 21. MVC JsonResult方法不接受参数
- 22. 接受列表作为类方法的参数:param - 名称“selected_fields”没有定义
- 23. 为什么python dict的fromkeys方法可以接受列表作为参数?
- 24. 如何用一个可以接受许多不同类型的参数来调用函数?
- 25. 如何创建一个通用的函数接受不同的参数类型
- 26. 如何定义接受curried函数参数的函数?
- 27. 何时在接口上定义方法以及何时不接受?
- 28. 什么是可以接受的glPolygonMode第一个参数值?
- 29. Scala如何在方法定义中接收多个参数?
- 30. 你将如何定义一个延迟(by-name)参数来接受一个带参数的函数?
仅供参考,这是在名称相同,但采取不同的参数的方法被称为*超载方法*。 – 2012-03-21 20:28:05