我一直都有这个问题,但到目前为止,我一直盲目跟进.
这是一段示例代码:
为什么这样:
public class EmployeeInfo
{
int _EmpNo;
public virtual int EmpNo
{
get { return _EmpNo; }
set { _EmpNo = value; }
}
string _EmpName;
public virtual string EmpName
{
get { return _EmpName; }
set { _EmpName = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
在获取/设置过程中没有其他任何附加功能,例如计算或验证?
这还够吗?
public class EmployeeInfo
{
public int EmpNo { get; set; }
public string EmpName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
另外,为什么virtual公共成员包装?
为什么这样?
自从在C#3.0中添加自动实现的属性以来,没有任何理由.它可能是遗留代码,没有改变,旧习惯,或与C#3前代码保持一致.
这还够吗?
不 - 您已将virtual属性转换为非虚拟属性.所以他们并不完全等同.
相当于
public class EmployeeInfo
{
public virtual int EmpNo { get; set; }
public virtual string EmpName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
另外,为什么虚拟公共成员包装?
这样派生类可以覆盖属性的逻辑 - 添加验证,更改通知等.
缩短形式何时会产生影响?
当类的内部代码(可以在编译时检测到)或通过反射访问它们(在运行时无法检测到,或通过静态代码分析)访问后备字段时.
"自动实现"属性实际上获得了编译器创建的支持字段,因此在这种意义上,如果引用支持字段的唯一位置在属性代码中,则它们是等效的.
| 归档时间: |
|
| 查看次数: |
119 次 |
| 最近记录: |