模板参数的C#void等效值
我的问题的背景是,我正在使用MonoDroid编写一个程序来使用WCF服务。我想要一些关于C#中SOAP的C#库,所以MonoDroid是一个明显的选择 我一直在尝试将void作为模板参数传递给AsyncTask Xamarin(MonoDroid的开发者)在AsyncTask上提供的文档还有很多需要改进的地方,可以在这里找到: 我需要做的是,我用Java完成了一个定义如下的异步任务模板参数的C#void等效值,c#,android,xamarin.android,android-asynctask,C#,Android,Xamarin.android,Android Asynctask,我的问题的背景是,我正在使用MonoDroid编写一个程序来使用WCF服务。我想要一些关于C#中SOAP的C#库,所以MonoDroid是一个明显的选择 我一直在尝试将void作为模板参数传递给AsyncTask Xamarin(MonoDroid的开发者)在AsyncTask上提供的文档还有很多需要改进的地方,可以在这里找到: 我需要做的是,我用Java完成了一个定义如下的异步任务 public class SoapRequestTask extends AsyncTask&l
public class SoapRequestTask extends AsyncTask<Void, Void, String>
公共类SoapRequestTask扩展了AsyncTask
C#与void模板参数的等价物是什么?在C#中,不能将void
(也称为)用作泛型类型参数。Net库通过具有多个“重载”类型来解决此问题,如Task
和Task
但我不知道单机器人,所以可能有一些特定的解决方案。文档似乎表明有一种特殊类型的
Java.Lang.Void
,可以使用(而不是这里不能使用的普通.NetVoid
。在C中没有与Void
等效的标准。该类型确实存在,但不能作为泛型类型参数使用
最接近的例子是F#使用Unit
作为值无趣的插槽的占位符。在C#中很容易复制
然后,它可以用于您不关心的值
public class SoapRequestTask : AsyncTask<Unit, Unit, String> {
...
}
公共类SoapRequestTask:AsyncTask{
...
}
对我来说,看起来您根本没有使用void类型,在示例中它只是表示“任何类型都可以在这里使用”。读取AsyncTask的“泛型类型段落”意味着这3种类型将表示参数类型、进度类型和结果类型。例如,如果您创建了一个声明为:
public class MyStringTask extends AsyncTask<String, Integer, Long> {
...
}
public abstract class AsyncTask<TParam, TProgress, TResult>
进度将以整数值的形式通知,结果值将以长数值的形式提供
在C#中,您通常会看到以下声明:
public class MyStringTask extends AsyncTask<String, Integer, Long> {
...
}
public abstract class AsyncTask<TParam, TProgress, TResult>
公共抽象类异步任务
对类型参数使用“T”语法,并按以下方式实现(使用上述示例):
公共类MyStringTask:AsyncTask
{
...
}
我实际上为任何感兴趣的人找到了答案:
语法是
private class SoapTask : AsyncTask{}
它的工作原理与java中的AsyncTask类似,但参数都是java.Lang.Objects(参数类型为java.Lang.Objects[]的情况除外)因此,您可以根据需要在正文中设置它们。那么,仅仅提供Object而不是Void就足够了吗?Mono for Android提供了一个不接受任何通用参数的AsyncTask;您链接到了它(尽管从Java文档导入的内容在那里有误导性)。只需从
AsyncTask
(无类型参数)继承并重写DoInBackground(params Java.Lang.Object[])
。
private class SoapTask : AsyncTask{}