日期:2014-05-18  浏览次数:20752 次

下面代码继承构造函数继承this()的作用?意义?求救!
这是在IssueVision中的一段代码,用来实现观察者模式的!
public   class   IssueSubject   :   Component,   ISubject

//首先定义类IssueSubject继承自Component和ISubject,从这里和类名可以看出,此类是作为OBSERVER(观察者)模式中的目标(Subject)实现的.目标(Subject)对象要求实现对观察者(Observer)的注册(Register)和通知,Component类就是用来实现注册(Register)的.大多数目标(Subject)对象的实现并不是并非将观察者(Observer)的引用直接存储在自己的实例变量中,而是将此人物委托给一个单独的对象(通常为一个容器)Component类就是这样一个容器,下面代码显示了如何用Component类容器来存储对观察者(Observer)对象的引用注册(Register)

public   IssueSubject(IContainer   Container)   :   this()
{
Container.Add(this);
}
其中构造函数public   IssueSubject(IContainer   Container)   :   this()后面的:this()
是什么意思,有什么意义,如果是base()我知道是调用或是说继承父类的构造函数,但这里用的是this(),如果是调用自己的构造函数的话,又缺少参数,因为本身是带参数的,而且这样做的意义是什么!不明白,希望高手赐教



------解决方案--------------------
代码中应该有还有个构造函数吧?不然怎么能编译呢.

public IssueSubject()
{
InitializeComponent();
}

------解决方案--------------------
有2个构造函数的,一个是IssueSubject(IContainer Container),一个是IssueSubject(),前者加上:this()表示构造函数链,在调用IssueSubject(IContainer Container)之前调用IssueSubject().
应该是这个意思.
比如:
clasee A
{
string ss= " ";
public A(string a)
{
ss = a;
}
public A():this( "ssssssss ")
{

}
}
------解决方案--------------------
兄弟,希望等得到你的100分,呵呵

首先,c# 里的 this 代表正在运行的当前实例,也就是这个类的一个实例(只不过系统是自己生成,不用我们显式声明和初始化)

第二, c#类中的默认构造函数(也就是无形参,无实现体的)在代码中是可以缺省的,我们可以不用代码写出来。(如果缺省,程序在编译的时候,系统会为我们加上这个构造函数)

第三,对构造函数 Func(para):this()来说 ,表示的是Func构造函数可以调用 this()函数里的代码,而this()就是Func的无行参的重载函数。 必须这样写,而不能写成Func(para):Func()

最后,我们可以知道
public IssueSubject(IContainer Container) : this()

表示的是 IssuSubject(Container) 调用自己类中的另一个函数中的代码(而这个函数this()就是此类中的默认构造函数 IssueSubject() ),
而恰好,这个默认构造函数 public IssueSubject() { } 没有显式写出来

楼主理解了?
------解决方案--------------------
//刚找到的代码,是有我说的那个构造函数的,继承Component,一般都有InitializeComponent函数的
using System;
using System.Collections;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Diagnostics;
using System.Windows.Forms;
using ThreadHelper;
using IssueVision.localhost;

namespace IssueVision
{
public enum SyncThread
{
MainThread = 0,
BackgroundThread = 1
}

public class IssueSubject : Component, ISubject
{

#region Delagate and Event Declarations
public delegate void PositionChangedEventHandler(object sender, EventArgs e);
public delegate void IssueDataChangedEventHandler(object sender, EventArgs e);
public delegate void ConflictDataChangedEventHandler(object sender, EventArgs e);
public delegate void LookupDataChangedEventHandler(object sender, EventArgs e);
public delegate void Synchronization_StartedEventHandler(object sender, EventArgs e);
public delegate void Synchronization_FinishedEventHandler(object sender, EventArgs e);
public delegate void DataChanged(IVDataSet newIssues);

// PositionChanged is raised when a different issue is selected from the list
public virtual event PositionChangedEventHandler PositionChanged;

// IssueDataChanged is raised when the data changes, either because the user
// edited the data, or because fresh data has arrived from the server
public virtual event IssueDataChangedEventHandler IssueDataChanged;