这个问题是在写观察者模式中遇到的一个问题。
具体的代码可以到《设计模式(十五)之观察者模式》中下载,下边只是部分代码。
我在抽象类中定义了构造函数,代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Observer
{/// <summary>/// 博客抽象类,有订阅功能/// </summary>public abstract class blog{/// <summary>/// 订阅者列表/// </summary>public List<IObserver> observerList = new List<IObserver>();/// <summary>/// 博客标题/// </summary>public string blogTitle = "";/// <summary>/// 博客作者/// </summary>public string blogAuthor = "";/// <summary>/// 构造函数/// </summary>/// <param name="title">博客标题</param>/// <param name="author">博客作者</param>public blog(string title,string author){this.blogAuthor = author;this.blogTitle = title;}}
}
大家注意,我这个构造函数中是有参数的。
接下来,我写了一个类来继承他,最开始,我是这样写的
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Observer
{public class MyBlog : blog{public MyBlog(string title,string author){}}
}
报错;
去网上找了一下:得到的结果基本上都是:
父类有了带参数的构造函数,子类的构造函数可以不和父类的构造函数一样,但是,如果你的父类定义了带参数的构造函数同时没有无参重载的情况下,那么在子类中,你必须对父类的带参数的构造进行赋值,也就是实参!
代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Observer
{public class MyBlog : blog{public MyBlog(string title,string author) : base(title,author){}}
}
解决方法就是,在子类的构造函数后加上base关键字及对应父类构造函数需要的参数。
以上就是所有的解决方法。
有好的建议,请在下方输入的评论。