我不确定为什么我说这个错误是诚实的.
private int hour
{
get;
set
{
//make sure hour is positive
if (value < MIN_HOUR)
{
hour = 0;
MessageBox.Show("Hour value " + value.ToString() + " cannot be negative. Reset to " + MIN_HOUR.ToString(),
"Invalid Hour", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
else
{
//take the modulus to ensure always less than 24 hours
//works even if the value is already within range, or value equal to 24
hour = value % MAX_HOUR;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我也试过做一个实际的财产:
public int hour
{
get;
set
{
//make sure hour is positive
if (value < MIN_HOUR)
{
hour = 0;
MessageBox.Show("Hour value " + value.ToString() + " cannot be negative. Reset to " + MIN_HOUR.ToString(),
"Invalid Hour", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
else
{
//take the modulus to ensure always less than 24 hours
//works even if the value is already within range, or value equal to 24
hour = value % MAX_HOUR;
}
}
}
Run Code Online (Sandbox Code Playgroud)
建议?
Tom*_*son 36
试试这个:
private int hour;
public int Hour
{
get { return hour; }
set
{
//make sure hour is positive
if (value < MIN_HOUR)
{
hour = 0;
MessageBox.Show("Hour value " + value.ToString() + " cannot be negative. Reset to " + MIN_HOUR.ToString(),
"Invalid Hour", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
else
{
//take the modulus to ensure always less than 24 hours
//works even if the value is already within range, or value equal to 24
hour = value % MAX_HOUR;
}
}
}
Run Code Online (Sandbox Code Playgroud)
Ree*_*sey 27
您需要为该get;部分以及该set;部分属性提供一个主体.
我怀疑你想要这样:
private int _hour; // backing field
private int Hour
{
get { return _hour; }
set
{
//make sure hour is positive
if (value < MIN_HOUR)
{
_hour = 0;
MessageBox.Show("Hour value " + value.ToString() + " cannot be negative. Reset to " + MIN_HOUR.ToString(),
"Invalid Hour", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
else
{
//take the modulus to ensure always less than 24 hours
//works even if the value is already within range, or value equal to 24
_hour = value % MAX_HOUR;
}
}
}
Run Code Online (Sandbox Code Playgroud)
话虽这么说,我也考虑让这个代码更简单.最好在属性设置器中使用异常而不是MessageBox来进行无效输入,因为它不会将您绑定到特定的UI框架.
如果这是不合适的,我建议将其转换为方法而不是使用属性设置器.这尤其正确,因为属性具有"轻量级"的隐含期望 - 并且向用户显示MessageBox确实违反了该期望.
dri*_*iis 26
使用自动属性时,无法为setter提供自己的实现.换句话说,你应该这样做:
public int Hour { get;set;} // Automatic property, no implementation
Run Code Online (Sandbox Code Playgroud)
或者为getter和setter提供你自己的实现,这是你想要从你的例子中判断的:
public int Hour
{
get { return hour; }
set
{
if (value < MIN_HOUR)
{
hour = 0;
MessageBox.Show("Hour value " + value.ToString() + " cannot be negative. Reset to " + MIN_HOUR.ToString(),
"Invalid Hour", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
else
{
//take the modulus to ensure always less than 24 hours
//works even if the value is already within range, or value equal to 24
hour = value % MAX_HOUR;
}
}
}
Run Code Online (Sandbox Code Playgroud)
你需要为getter和setter提供一个body,或者两者都不提供.由于你的setter中有非平凡的逻辑,你需要一个手动实现的getter,如下所示:
get { return _hour; }
Run Code Online (Sandbox Code Playgroud)
如果您决定不需要setter中的逻辑,那么您可以使用自动实现的属性,如下所示:
public int Hour { get; set; }
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您希望自动编译器提供基本实现,则不必为getter和setter提供正文.
但是,这需要您确保通过将web.config更新为类似的方式来使用v3.5编译器
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
<providerOption name="CompilerVersion" value="v3.5"/>
<providerOption name="WarnAsError" value="false"/>
</compiler>
</compilers>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
133662 次 |
| 最近记录: |