编写“获取”方法的正确方法是什么?

时间:2010-09-30 07:09:30

标签: c#

我的一位同事经常争论写“获取”方法的“正确方法”。 我的意见是object GetSomeObject()。我的同事认为最好是void GetSomeObject(object obj)。我知道在两种情况下结果都是一样的。我想听听和其他意见。哦,我忘了告诉我们谈论的是什么平台 - .NET Framework语言是C#。

7 个答案:

答案 0 :(得分:8)

如果它是一个简单的get,那么它应该是一个属性

public object SomeObject 
{
    get { return _someObj; } 
}

如果是计算的那么

object GetSomeObject() { ... }

更常见的是预期。除了另一个必须有一个引用或输出作为参数,如果前者可以实现不鼓励

答案 1 :(得分:3)

void GetSomeObject(object obj)实际上不会'得到'任何东西。如果您将其转换为out参数,您可以为其分配一个值,并且它在技术上可行,请在完全按照预期使用返回类型时购买原因:

public void GetSomeObject(out returnObject)
{
    returnObject = ...
}

public object GetSomeObject()
{
    return ...
}

答案 2 :(得分:2)

当然object GetSomeObject()更好。另一个更像是一个吸气剂而不是吸气剂......

答案 3 :(得分:1)

object getSomeObject();更好。

答案 4 :(得分:1)

一般来说,第一种方式更典型,更好,因为object GetSomeObject()允许您执行以下操作:GetSomeObject().Foo()。而且它更直观一些。

但是,bool GetSomeObject( out object obj )TryGetValue()Dictionary的情况一样有用。

答案 5 :(得分:1)

通过修改引用参数(至少对我来说,这是一种老式的获取值的方式),它更容易读取并且是良好的编码实践返回值。

如果您正在寻找更深层的含义:

C#中的函数参数创建为Value parameters by default(与参考参数相对应)。

要更改参数值并将更改保留到调用代码,需要将参数声明为引用。你可能知道这一切。

这就是区别:value和ref参数都存储在堆栈中(效率很高),但参考参数的数据stored on the heap。因此使用参考值会产生一小部分开销。

在大多数情况下,这根本不是问题,但可能会出现一些问题,例如:

  • 使用过多堆栈的递归函数(并且你得到堆栈溢出)
  • 需要速度的函数,如计算素数或分形

可能有更多,更好的例子,比我给的,你得到了这个想法。

答案 6 :(得分:0)

我几乎只能看到使用void GetSomeObject(out object obj)代替object GetSomeObject()的一个原因,那就是如果你摆脱了空洞而改为ErrorResult GetSomeObject(out object obj)(以及GetSomeObject)由于您可以通过返回值报告状态,因此操作很多且很容易出错。

然而,通过普通的旧例外恕我直言仍然可以更好地处理。虽然我知道某些编码标准表示根本不应该使用异常,但在这些情况下你可能想做类似的事情。

不过,我会说只是去一个属性或object GetSomeObject(),除非你有真的有充分理由不这样做。