Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#error(使用接口方法):非静态字段、方法或属性需要对象引用_C#_Api_Static - Fatal编程技术网

C#error(使用接口方法):非静态字段、方法或属性需要对象引用

C#error(使用接口方法):非静态字段、方法或属性需要对象引用,c#,api,static,C#,Api,Static,我在使用一个有过时文档的第三方API时遇到了问题,所以我正试图弄清楚为什么会出现这种@#美元!它不起作用了。以##美元计!!我的意思是“代码”,当然:) 据我所知,WAPISoap是一个公共界面,我通过在visualstudio中添加一个web引用而获得 我还知道descripe()方法接受两个参数,一个字符串和一个类型为credential的对象,并返回一个字符串。任何帮助都将不胜感激:) 以下是我目前得到的信息: using WAPIClient; using System; using P

我在使用一个有过时文档的第三方API时遇到了问题,所以我正试图弄清楚为什么会出现这种@#美元!它不起作用了。以##美元计!!我的意思是“代码”,当然:)

据我所知,WAPISoap是一个公共界面,我通过在visualstudio中添加一个web引用而获得

我还知道descripe()方法接受两个参数,一个字符串和一个类型为credential的对象,并返回一个字符串。任何帮助都将不胜感激:)

以下是我目前得到的信息:

using WAPIClient;
using System;
using Project1.WsWWDAPI;
namespace WAPIClient
{
    class ResellerAPI
    {
        public void CallDescribe()
        {
            String sReturnXml;
            Credential m_Crededential = new Project1.WsWWDAPI.Credential();
            m_Crededential.Account = "account";
            m_Crededential.Password = "password";
            String sCLTRID = System.Guid.NewGuid().ToString();
            sReturnXml = WAPISoap.Describe(sCLTRID, m_Crededential);
            Console.WriteLine(sReturnXml);
        }
        static void Main(string[] args)
        {
            ResellerAPI reseller = new ResellerAPI();
            reseller.CallDescribe();
        }
    }
}

错误是因为您在静态上下文中使用非静态方法-您应该拥有WAPISoap的实例,以便调用非静态的成员函数。听起来您需要创建WAPISoap的实例,然后在该实例上调用descripe。

descripe方法不是静态的,这意味着您需要在
WAPI
类的实例上调用它:

WsWWDAPI.WAPI m_WAPIObj = null;
WsWWDAPI.Credential m_Crededential = null;

public void Init()
{
    m_WAPIObj = new WsWWDAPI.WAPI();
    m_Crededential = new WsWWDAPI.Credential();
    m_Crededential.Account  = "account";
    m_Crededential.Password = "password";
}
public void CallDescribe()
{
    String sReturnXml;
    String sCLTRID = System.Guid.NewGuid().ToString();
    sReturnXml = m_WAPIObj.Describe(sCLTRID, m_Crededential);
    Console.WriteLine( sReturnXml );
}
static void Main(string[] args)
{
    ResellerAPI reseller = new ResellerAPI();
    reseller.Init();
    reseller.CallDescribe();
}

请参阅:

错误在哪一行?带有
descripe()
的行?是的,错误是当我试图调用方法WAPISoap.descripe(sCLTRID,m_credential)时;据我所知,我不能实例化一个接口不,你不能实例化一个接口,但是必须有一个实现该接口的类,你可以实例化,或者某个地方有一个静态方法,可以返回实现该接口的类的实例。谢谢你的帮助,我会尝试寻找你说得对的类-我猜这是某个浏览器的behvior,我已经导航出我的编辑:-(文档中是这么说的,但是WAPI类没有这么说。)exist@ezra:您使用的是旧引用吗?我使用的是该文档中的引用,具体来说是的,它仍然不起作用,我无法在对象浏览器中找到WAPI,请尝试将
WsWWDAPI.WAPI
替换为
WsWWDAPI.WAPISoap