MrE*_*ndo 16 .net c# naming-conventions
我的同事和我一直在讨论应该叫什么集合.
例如:
类产品 - 集合 - 类产品
要么
类产品 - 集合 - 类ProductCollection
我已经四处看看,看看我是否可以看到使用其中一个的任何指导方针或原因,但似乎没有任何东西出现.例如,框架似乎使用两种变体.我可以看到的论点是,具有products变量集合的类应该被称为Products,但它应该是ProductCollection类型.
哪个是正确的?
在同一个叶片中有一个标准,用于命名函数的返回变量.例如retVal?
我们主要用C#编写代码,虽然我不确定这会影响我的问题.
And*_*are 44
我会说,使用泛型,很少有理由创建自定义集合类型.但是,如果你必须我会说这ProductCollection
最符合框架的命名约定.
尽管如此,考虑使用List<Product>
或Collection<Product>
或更好,但IList<Product>
还是ICollection<Product>
.
编辑: 这是对MrEdmundo的评论如下.
在您的情况下,您有两个选择.最明显的选择是使用这样的继承:
class Ball { }
class BallCollection : List<Ball>
{
public String Color { get; set; }
public String Material { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我说得很明显,因为乍一看似乎是最好的主意,但经过一番思考后,很明显这不是最好的选择.如果您或Microsoft创建了一个新的SuperAwesomeList<T>
并且您希望使用它来提高您的BallCollection
类的性能,该怎么办?这很困难,因为你List<T>
通过继承绑定到类,更改基类可能会破坏任何BallCollection
用作a的代码List<T>
.
那么什么是更好的解决方案?我建议在这种情况下,你最好支持组合而不是继承.那么基于组合的解决方案会是什么样子呢?
class Ball { }
class BallCollection
{
public String Color { get; set; }
public String Material { get; set; }
public IList<Ball> Balls { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
请注意,我已将该Balls
属性声明为类型IList<T>
.这意味着只要该类型实现,您就可以使用您希望的任何类型自由地实现该属性IList<T>
.这意味着您可以SuperAwesomeList<T>
在任何时候自由使用,这使得此类型的可扩展性更强,维护更少痛苦.
Phi*_*ert 21
产品肯定不正确恕我直言.非静态类名应该代表名词(不是复数),因为你应该可以说" x是[classname] ".
显然,产品不适合该方案.ProductCollection做:
插图:
var products = new Products(); // products is a Products
var products = new ProductCollection(); // products is a ProductCollection
Run Code Online (Sandbox Code Playgroud)
哪一个"听起来不错"?
关于命名集合类的另一件事:我通常尝试以这样的方式命名集合类,以便清楚它是什么类型的集合.
例如:
如果对字典的键是什么有疑问,那么最后一个可能是不明确的,因此最好指定键类型是什么(如ProductDictionaryByString).但说实话,我很少用这种方式命名,因为大多数时候密钥都是字符串.
.NET Framework经常为其集合类型使用"Collection"后缀.StringCollection,ObservableCollection,KeyedCollection等.所以请使用ProductCollection.
注意到没有人回复你的retVal东西(或者我可能只是失明).虽然我不是专家; 关于这个retVal
问题我不是100%肯定你的意思是"命名返回变量",但如果你的意思是这样的话:
public void GetSomething(out object retVal)
{
retVal = ThingFactory.CreateSomething();
}
Run Code Online (Sandbox Code Playgroud)
我会说,无论约定是什么,都不要这样做.这很烦人.只需返回值即可.如果你需要返回多个东西,那么我认为该方法要么做不止一件事(一个方法不应该),要么这些东西应该包含在某种可以返回的逻辑类中.
如果改为"命名返回变量",你的意思是这样的:
var retVal = ThingFactory.CreateSomething();
Run Code Online (Sandbox Code Playgroud)
然后我会说根据它是什么来命名变量.它将被用于什么.如果是汽车清单,请拨打电话listOfCars
,如果是以后要吃的面包,请拨打电话pieceOfBread
或pieceOfBreadToBeEatenLater
.
希望有所帮助,并且它离某个地方不远:p
归档时间: |
|
查看次数: |
7721 次 |
最近记录: |