0

我是 OOP 的新手。希望有人澄清我的疑问。

如果我想调用类似的方法

int number = numberMethod();

方法定义应该是什么?

public void numberMethod(out int num)
{
    num = 3;
}

或者

public int numberMethod()
{
    int num = 3;
    return num;
}

还是两个定义都一样??

4

3 回答 3

4

不,它们不一样。你必须使用第二种形式,而不是第一种。

如果您尝试使用该方法的返回值 - 这就是您在这里所做的:

int number = numberMethod();

那么该方法必须有一个适当的返回类型——一个可以隐式转换为int. 您不能调用这样的void方法,并且 C# 不会将“具有out参数和void返回类型的方法”隐式视为“具有与参数类型匹配的返回类型的方法out”。

在具有返回类型的方法中包含参数很少是一个好主意。(事实上​​,使用参数相对来说很少是一个好主意,IMO。它们通常表明一个方法正在尝试做太多事情。)outvoidout

于 2013-02-21T13:32:26.930 回答
3

第二个,

因为您正在调用如下方法,这意味着您正在调用返回值的方法

int number = numberMethod();

方法

public int numberMethod()
{
    int num = 3;
    return num;
}

如果你想使用第一个而不是你需要调用它

int number ;
numberMethod(out number);

因为你有 void 返回值并在 param 中指定

方法

public void numberMethod(out int num)
{
    num = 3;
}
于 2013-02-21T13:32:00.277 回答
2

不,它们不是同一种方法,从消息的签名中非常清楚,

public int numberMethod()  // return as integer
{
    int num = 3;
    return num;
}

是用于您需要的正确方法。

第二种方法

public void numberMethod(out int num)
{
    num = 3;
}

也可以用但是You need to change the way it is invoked

它可以像

int num;
numberMethod(out num);

两种方法都将具有相同的效果,即num具有 value 3


out方法中的参数仅在需要从method/function.

于 2013-02-21T13:32:41.803 回答