困惑:我的方法将不接受包含在其定义中的参数

本文关键字:定义 参数 包含 我的 方法 不接受 困惑 | 更新日期: 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
希望你明白。