我的一位同事经常争论写“获取”方法的“正确方法”。
我的意见是object GetSomeObject()
。我的同事认为最好是void GetSomeObject(object obj)
。我知道在两种情况下结果都是一样的。我想听听和其他意见。哦,我忘了告诉我们谈论的是什么平台 - .NET Framework语言是C#。
答案 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()
,除非你有真的有充分理由不这样做。