0

我的应用程序中有两种方法,它们都从不同的 Web 服务返回相似的对象。

第一个编译好,但我刚刚添加的第二个不会编译,给我一个错误消息'方法必须返回一个值'

这是我的代码:

public SforceService() {
        this.Url = global::email2case_winForm.Properties.Settings.Default.email2case_sforce_SforceService;
        if ((this.IsLocalFileSystemWebService(this.Url) == true)) {
            this.UseDefaultCredentials = true;
            this.useDefaultCredentialsSetExplicitly = false;
        }
        else {
            this.useDefaultCredentialsSetExplicitly = true;
        }
    }

    public SforceServiceSandbox()
    {
        // 
        // 
        this.Url = global::email2case_winForm.Properties.Settings.Default.SForceService;
        if ((this.IsLocalFileSystemWebService(this.Url) == true))
        {
            this.UseDefaultCredentials = true;
            this.useDefaultCredentialsSetExplicitly = false;
        }
        else
        {
            this.useDefaultCredentialsSetExplicitly = true;
        }
    }

请问我错过了什么,我应该添加一个特殊的声明吗?

4

6 回答 6

3

两种“方法”似乎都是构造函数。构造函数必须与封闭类型同名。如果你有多个构造函数,它们必须有不同的参数列表(“重载”)。

在这里,您发布的两个方法中只有一个可以是构造函数,并且它必须与类型具有相同的名称。另一个名称不同的方法是常规方法,并且必须具有返回类型。如果该方法不返回值,则其返回类型为void.

public class MyType()
{
    public MyType() { }              // constructor 1
    public MyType(int x) { }         // constructor 2
    public void Foo() { }            // regular method
    public int Bar() { return 42; }  // regular method 2
}
于 2014-03-21T16:17:07.657 回答
2
public SforceService()
{
}

此语法适用于在创建类时调用的构造函数。名称必须与类名相同。

如果您想要一个没有返回类型的方法,请使用void

public void SforceServiceSandbox()
{
}

看起来你想要一个类来处理 2 个场景。在这种情况下,您有两种选择,

两班

public class SforceService
{
    public SforceService() {
        this.Url = global::email2case_winForm.Properties.Settings.Default.email2case_sforce_SforceService;
        if ((this.IsLocalFileSystemWebService(this.Url) == true)) {
            this.UseDefaultCredentials = true;
            this.useDefaultCredentialsSetExplicitly = false;
        }
        else {
            this.useDefaultCredentialsSetExplicitly = true;
        }
    }
}

public class SforceServiceSandbox
{
    public SforceServiceSandbox()
    {
        this.Url = global::email2case_winForm.Properties.Settings.Default.SForceService;
        if ((this.IsLocalFileSystemWebService(this.Url) == true))
        {
            this.UseDefaultCredentials = true;
            this.useDefaultCredentialsSetExplicitly = false;
        }
        else
        {
            this.useDefaultCredentialsSetExplicitly = true;
        }
    }
}

或者你传入 url 的一堂课

public class SforceService
{
    private SforceService() { }

    public SforceService(TypeOfUrl url)
    {
        this.Url = url;
        if ((this.IsLocalFileSystemWebService(this.Url) == true))
        {
            this.UseDefaultCredentials = true;
            this.useDefaultCredentialsSetExplicitly = false;
        }
        else
        {
            this.useDefaultCredentialsSetExplicitly = true;
        }
    }
}
于 2014-03-21T16:18:43.783 回答
1

如果它不返回值,则需要将 void 修饰符添加到您的方法中。没有修饰符的方法是构造函数,是正确的。因此,将 void 添加到不是您的班级名称的那个。

于 2014-03-21T16:18:03.133 回答
1

如果您不想从方法返回值,请声明它void

public void Something() { }

构造函数的形式为:

public ClassName() { }

并且必须与声明它的类同名。

要从方法返回值,请声明类型,例如:

public string GetAString() { return ""; }

于 2014-03-21T16:18:10.990 回答
1

在 C# 中,不返回值的方法应声明为“void”,例如

public void Foo()
{

}
于 2014-03-21T16:18:12.057 回答
0

您错过了void方法中的关键字,以便在方法{}名称之前执行要返回值的代码。

于 2014-03-21T16:34:28.267 回答