困惑:我的方法将不接受包含在其定义中的参数
本文关键字:定义 参数 包含 我的 方法 不接受 困惑 | 更新日期: 2023-09-27 18:07:04
我不知道该怎么表达,但下面是:
我有一个自定义类叫做EmailAttachment它有3个属性/属性定义。这个类的对象被传递给名为UploadAttachment
的方法(当然是在另一个类中)void UploadAttachment(EmailAttachment attachment);
但是,当我使用
来实现它时,例如,client.UploadAttachment(emailAttachmentInstance)
Visual Studio告诉我UploadAttachment不接受1个参数,而是接受3个参数(即来自类定义的变量)。
这让我很困惑,所以感谢任何帮助
澄清一下…
client
实际上是一个WCF服务的实例。服务接口包括
[OperationContract]
void UploadAttachment(EmailAttachment attachment); //which is public.
下面是所讨论的类……
[MessageContract]
public class EmailAttachment
{
[MessageHeader(MustUnderstand = true)]
public int EmailID;
[MessageHeader(MustUnderstand = true)]
public string FileName;
[MessageBodyMember(Order = 1)]
public Stream AttachmentFile;
}
这是很难回答没有更多的信息(你可以张贴一些代码吗?),但如果我可能被允许猜测我会说,定义"客户端"的类有两个方法称为UploadAttachment,你试图调用的一个是不公开的。例如
public class Client {
void UploadAttachment(EmailAttachment e) {} //note: needs to be public
public void UploadAttachment(int a, int b, int c) {}
}
所以这是我的答案(部分猜想/一个朋友的假设)…
我想这与WCF服务的性质有关。为了防止客户端的复杂性(即依赖于服务定义的类),客户端可以传递[service]类的属性/属性(前面提到的3个)作为方法的参数(在本例中为UploadAttachment()
)。因此,它只需要知道这些属性/属性的数据类型,而不必实例化其类的对象。对于自定义返回类型也可以这样做。
例如,如果SomeClass
定义为…
[MessageContract]
public class SomeClass
{
[MessageBodyMember]
public bool value;
public SomeClass(bool value)
{
this.value = value;
}
}
…该服务有一个返回SomeClass
值的方法,如下所示…
SomeClass SomeMethod();
…客户端可以像这样调用SomeMethod()
…
bool someReturnValue = client.SomeMethod();
而不必实例化SomeClass
。
希望你明白。