max*_*axp 2 .net c# oop properties accessor
哪种更好的做法,为什么?
bool IsTodayMonday { get { return DateTime.Now.DayOfWeek == DayOfWeek.Monday; } }
Run Code Online (Sandbox Code Playgroud)
要么
bool IsTodayMonday()
{
return DateTime.Now.DayOfWeek == DayOfWeek.Monday;
}
Run Code Online (Sandbox Code Playgroud)
Raz*_*zie 10
在我看来,在这些情况下使用属性,除非:
在你的例子中,我会选择一个属性.
对我来说 - 在这种特殊情况下 - 根本不重要.
如果您查看生成的IL代码,您会发现它完全相同.该属性将导致创建一个生成相同IL代码的方法.
关于.Net实现,您应该使用该属性.当没有使用参数时,.Net框架使用IsXXX-Functionality的属性,否则它使用方法,除非其他一些事情表明使用方法更合适.(有关此示例,请参阅上面的帖子)
这是两个版本生成的IL-Code,如果你感兴趣的话(我使用了一个简单的控制台应用程序和静态方法/属性)
{
// Code size 22 (0x16)
.maxstack 2
.locals init ([0] bool CS$1$0000,
[1] valuetype [mscorlib]System.DateTime CS$0$0001)
IL_0000: nop
IL_0001: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now()
IL_0006: stloc.1
IL_0007: ldloca.s CS$0$0001
IL_0009: call instance valuetype [mscorlib]System.DayOfWeek [mscorlib]System.DateTime::get_DayOfWeek()
IL_000e: ldc.i4.1
IL_000f: ceq
IL_0011: stloc.0
IL_0012: br.s IL_0014
IL_0014: ldloc.0
IL_0015: ret
} // end of method Program::get_IsTodayProp
Run Code Online (Sandbox Code Playgroud)
干杯!
属性应该是值的一个相当简单的包装器.对于属性的用户,它应该像变量一样.
如果它做了任何工作,有副作用(例如读/写它改变你的类中的其他状态),或者如果它可能失败(例如抛出异常),那么最好将它写为Get方法,这样调用者可以看到它不仅仅是一个简单的值.
除此之外,更多的是个人偏好(你是否认为属性应该只代表具体的成员变量,或者它们是否可以用于读取"计算值",例如你的例子中的那个).
| 归档时间: |
|
| 查看次数: |
1373 次 |
| 最近记录: |