【发布时间】:2014-01-18 19:44:10
【问题描述】:
这是一个过于简单的例子,但我有一些现实生活中的代码在概念上做同样的事情(试图验证派生类的值“设置”访问器方法),分析器给我“不要在构造函数。”我试图弄清楚我是否应该更改我的代码,或者忽略警告。我想不出任何我应该听从警告的理由。
public abstract class SimpleUrl
{
protected string _url;
public abstract string Url { get; set; }
public SimpleUrl()
{ }
public SimpleUrl(string Url)
{
this.Url = Url;
}
}
public class HttpUrl : SimpleUrl
{
public HttpUrl()
{ }
public HttpUrl(string Url)
{
this.Url = Url;
}
public override string Url
{
get
{
return this._url;
}
set
{
if (value.StartsWith("http://"))
this._url = value;
else
throw new ArgumentException();
}
}
}
【问题讨论】:
-
原因是子类可能会在超类尚未初始化的那个方法中使用对象的属性,从而导致意外行为。
-
射击。一分钟前,我发布了一个答案,这是错误的。所以我删除了它。以防万一有人注意到这一点。
-
@EdwardNedHarvey 我注意到了,并且仍然可以看到它:-P
标签: c# methods constructor overriding