这样写的构造函数我不怎么看得懂,大家能帮忙解释一下吗?
public class WebSpider
{
private Uri m_startUri;
private Uri m_baseUri;
private int m_uriProcessedCountMax;
private int m_uriProcessedCount;
private bool m_keepWebContent; private Queue m_webPagesPending;
private Hashtable m_webPages;
private IWebPageProcessor m_webPageProcessor; public WebSpider( string startUri ) :
this ( startUri, -1 ) { } public WebSpider( string startUri, int uriProcessedCountMax ) :
this ( startUri, "", uriProcessedCountMax, false, new WebPageProcessor( ) ) { } public WebSpider( string startUri, string baseUri, int uriProcessedCountMax ) :
this ( startUri, baseUri, uriProcessedCountMax, false, new WebPageProcessor( ) ) { } public WebSpider( string startUri, string baseUri, int uriProcessedCountMax, bool keepWebContent, IWebPageProcessor webPageProcessor )
{
StartUri = new Uri( startUri );
// In future this could be null and will process cross-site, but for now must exist
BaseUri = new Uri( Is.EmptyString( baseUri ) ? m_startUri.GetLeftPart( UriPartial.Authority ) : baseUri ); UriProcessedCountMax = uriProcessedCountMax;
KeepWebContent = keepWebContent; m_webPagesPending = new Queue( );
m_webPages = new Hashtable( ); m_webPageProcessor = webPageProcessor; m_webPageProcessor.ContentHandler += new WebPageContentDelegate( this.HandleLinks );
}
这是这个类的定义以及它的四个构造函数
下面是对构造函数的调用WebSpider spider = new WebSpider( txtUri.Text, txtBaseUri.Text, (int)spnProcessUriMax.Value );我所不解的是这个类的构造函数为什么在 public WebSpider( string startUri )后面加个冒号 再写个this,冒号表示属于当前实例还是什么?this里面的参数又是什么参数?前三个构造函数什么事情都没有做又有什么用?
public class WebSpider
{
private Uri m_startUri;
private Uri m_baseUri;
private int m_uriProcessedCountMax;
private int m_uriProcessedCount;
private bool m_keepWebContent; private Queue m_webPagesPending;
private Hashtable m_webPages;
private IWebPageProcessor m_webPageProcessor; public WebSpider( string startUri ) :
this ( startUri, -1 ) { } public WebSpider( string startUri, int uriProcessedCountMax ) :
this ( startUri, "", uriProcessedCountMax, false, new WebPageProcessor( ) ) { } public WebSpider( string startUri, string baseUri, int uriProcessedCountMax ) :
this ( startUri, baseUri, uriProcessedCountMax, false, new WebPageProcessor( ) ) { } public WebSpider( string startUri, string baseUri, int uriProcessedCountMax, bool keepWebContent, IWebPageProcessor webPageProcessor )
{
StartUri = new Uri( startUri );
// In future this could be null and will process cross-site, but for now must exist
BaseUri = new Uri( Is.EmptyString( baseUri ) ? m_startUri.GetLeftPart( UriPartial.Authority ) : baseUri ); UriProcessedCountMax = uriProcessedCountMax;
KeepWebContent = keepWebContent; m_webPagesPending = new Queue( );
m_webPages = new Hashtable( ); m_webPageProcessor = webPageProcessor; m_webPageProcessor.ContentHandler += new WebPageContentDelegate( this.HandleLinks );
}
这是这个类的定义以及它的四个构造函数
下面是对构造函数的调用WebSpider spider = new WebSpider( txtUri.Text, txtBaseUri.Text, (int)spnProcessUriMax.Value );我所不解的是这个类的构造函数为什么在 public WebSpider( string startUri )后面加个冒号 再写个this,冒号表示属于当前实例还是什么?this里面的参数又是什么参数?前三个构造函数什么事情都没有做又有什么用?
第二个和第三个构造方法继承第四个,第一个继承第二个,所以实例化时,根据重载,一个,两个,三个,五个的参数都能实例化。
this里是重载时不同的参数,调用时就可以相应的传递参数
构造函数如果不写,系统就会自动添加一个不带参数的构造函数,那样的话,调用时就不能传递参数。
再来解决你的问题
WebSpider spider = new WebSpider( txtUri.Text, txtBaseUri.Text, (int)spnProcessUriMax.Value );这是一个实例化对象,
WebSpider( string startUri )后面加个冒号 再写个this,冒号表示属于当前实例还是什么?冒号表示这个构造函数继承public WebSpider( string startUri, int uriProcessedCountMax )这个构造函数。
this里面的参数又是什么参数?就是您实例化中对象传进去的参数:txtUri.Text
前三个构造函数什么事情都没有做又有什么用?
您可以看下,:表示继承。这样理解就好多了