函数应该以“Get”开头吗?

8
我正在尝试查看C#编码标准,以使我的代码更加美观和规范化,我有一个问题:根据C#编码标准,函数(非void方法)是否应该以“Get”开头?例如:“GetSongOrder()”,“GetNextLine()”等?谢谢。

1
@Alan,这只是展示了许多不同的编码“标准”。 - leeeroy
Zen的论点很确凿。 但是它们实际上并不是。 - Casper Leon Nielsen
6个回答

24

有两种情况:

如果例程可以快速“获取”值,而不会在代码中引起副作用,则建议使用属性getter,并省略“get”名称:

public SongOrder SongOrder
{
   get { return this.songOrder; } // ie: an enum
}

然而,如果需要进行处理,则适用于具有“Get...”名称的方法。 这表明调用此方法可能会产生副作用,例如额外的处理或更改某些状态:

public string GetNextLine()
{
    string line = this.stream.ReadLine(); // This may cause a longer running operation, especially if it's using Disk IO/etc
    // do other work?
    return line;
}

1
非常好的描述。我的想法完全一致——属性永远不应该使用动词-名词约定,而应该只是名词。方法应该始终是动词-名词。 - KP.
谢谢您的回答,但我的意思是例如你应该选择“GetNextLine”还是“ReadLine”。 - Alon Gubkin
@Alon:GetNextLine和ReadLine可能是同一件事,也可能是不同的 - 这并不是立即清楚的。如果您正在从文件中读取,请使用“ReadLine”。如果您正在从内存中的字符串获取行,请使用“GetNextLine”。 - FrustratedWithFormsDesigner

3

函数名应简洁明了,易于理解。不多不少。

如果Get适合你的话,请使用Get。如果Retrieve更好,请使用它。

命名规范并没有真正的“标准”。


3
我会说:“函数名应该尽可能简洁,同时保持自我描述性”- 不要太短 ;) - Reed Copsey

2

通常,函数的命名约定是动词-名词。 "Get"只是您可能看到的动词之一。 它也可以是“Activate”、“Close”、“Dump”或任何其他动词...这只是英语和一般编码的结果,方法或函数通常会对“某种对象”执行“某些操作”。


1

我没有看到关于这个的C#标准,但是我看到的大部分实际代码都使用“getter”属性,并省略函数名称中的“Get”单词。 例如:

Public SongOrderList SongOrder
{
    get
    {
      return mySongOrderList;
    }
}

在我通常看来,使用“Get”(和“Set”)作为函数名前缀,是在没有像.NET一样的属性的语言中看到的(如C、Java等语言)。

编辑:

...当然你也可以有设置器

Public SongOrderList SongOrder
{
    get
    {
      //do some processing code here
      return mySongOrderList;
    }
    set
    {
      //do some processing code here
      mySongOrderList = value; //value is a C# keyword, in case you didn't know. it is the parameter to the setter
    }
}

当然,如果你想要一个getter和setter,并且不需要任何额外的处理,只是纯粹的Java-bean式的get/set,你可以这样做:

Public SongOrderList SongOrder
    {
        get; set;
    }

如果你只想要一个公共的getter,你可以这样做(我想 - 已经有一段时间了):
Public SongOrderList SongOrder
    {
        public get; private set;
    }

抢先一步了。 :) 我认为想要使用“Get”的倾向来自于Java频繁使用GetFoo()/SetFoo(value)对。在C#中,我们通常将它们封装在属性Foo中。 - JMD
1
虽然并非总是如此 - 如果调用它会产生副作用,我认为将其命名为“Get”更好。 - Reed Copsey
@Reed Copsey:如果有副作用,我会尝试使用函数而不是使用单词“Get”,而是使用“Retreive”、“Extract”等等。主要是因为对于我来说,“get”意味着仅仅是一个“get”,没有其他副作用。 - FrustratedWithFormsDesigner

1

不,没有规定函数必须以“Get”开头。

在创建有意义的函数名称时,它们通常采用这种形式,例如GetHashCode函数。其他动词在开头也很常见,例如ToString函数,只有动词,例如Encode函数。

还有其他形式,您可以描述函数的结果,例如Substring函数。


1
除了其他答案之外 - 如果您有像GetNextLine()这样的方法,您可能希望考虑返回一个枚举,例如:
IEnumerable

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接