在下面的示例中,如果用于初始化属性FromDate,您会为参数命名什么?
对于类构造函数方法,我喜欢让构造函数参数变量的名称与正在初始化的属性的名称相匹配。例如,参数“fromDate”用于使用语句_FromDate = fromDate初始化模块级变量“_FromDate”。同样,我也可以写Me.FromDate = fromDate。
C#的区分大小写的支持者可能会说使用一个领先的小写字母作为参数变量名称,我认为这是MS惯例,是一种可接受的方法,可以将它与同名属性区别开来。 / p>
但是,VB不区分大小写,我通常很感激。在下面的示例中,我使用的是与属性名称“fromDate”匹配的param名称,而VB在存在歧义时指的是本地实例。但是,很多人可能会认为这种“模糊性”为开发人员带来了机会混淆并且没有意识到正在使用哪个变量。例如,我的意图是传递两个参数,“fromDate”和“toDate”但我意外地忽略了一个因此,VB.NET没有警告我的错误,因为它假设语句_ToDate = ToDate等同于_ToDate = Me.ToDate而不是通知我赋值语句右侧的变量未声明。
Public Class Period
Property FromDate As Date
Property ToDate As Date
Public Sub New(ByVal fromDate As Date)
If fromDate > ToDate Then
Throw New ArgumentException("fromDate must be less than or equal to toDate")
End If
_FromDate = fromDate
_ToDate = ToDate
End Sub
End Class
那么VB.NET的最佳解决方案是什么?
根据我的判断,我们应该有一个约定,为所有参数变量加前缀前缀,但是微软不鼓励使用前缀吗?例如:
Public Sub New(ByVal paramFromDate As Date, paramToDate As Date)
..或者它可能缩短为pFromDate,pToDate ......
无论采用何种方法,我认为它应该是一种在整个应用程序中使用的一致方法。
你做什么的?
答案 0 :(得分:3)
尽可能使用最清晰的代码,我建议不一个前缀。我认为使用相同的名称(小写的第一个字母)是最清晰的代码。为了避免遇到这个问题,我依靠一个工具,比如编译器警告,FxCop或ReSharper来提醒我,我正在为自己分配一些东西,因为在所有场景中几乎肯定都是错误的。
答案 1 :(得分:3)
我知道这违反了所有Microsoft惯例,但我们使用v_表示ByVal参数,r_表示ByRef参数,m_表示模块级变量。这允许你拥有
m_FromDate = v_FromDate
你可以直接看到发生了什么,而无需检查变量的定义。我认为非匈牙利语的最大理由是现代IDE允许你在悬停时看到类型,更改类型会留下不正确的变量。此范围前缀不与该理论冲突,并且如果需要,您可以使用CodeRush和ReSharper更新变量的每个实例。
答案 2 :(得分:2)
就个人而言,我更喜欢_
前缀约定,但我也喜欢其他人。在PL / SQL中,对于in,out或in / out参数,我的参数以in_
,out_
或io_
为前缀。
我不喜欢只使用大写和小写来区分任何语言。