这个问题是在写观察者模式中遇到的一个问题。
具体的代码可以到《设计模式(十五)之观察者模式》中下载,下边只是部分代码。
我在抽象类中定义了构造函数,代码如下:
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关键字及对应父类构造函数需要的参数。
以上就是所有的解决方法。
有好的建议,请在下方输入的评论。