C# 未提供必须形参对应的实参

发布时间:2019-09-25 23:09:30 阅读:14

    这个问题是在写观察者模式中遇到的一个问题。

    具体的代码可以到《设计模式(十五)之观察者模式》中下载,下边只是部分代码。

     

    我在抽象类中定义了构造函数,代码如下:

    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)
            {
     
            }
        }
    }

    报错;

    121212.png

     

    去网上找了一下:得到的结果基本上都是:

    父类有了带参数的构造函数,子类的构造函数可以不和父类的构造函数一样,但是,如果你的父类定义了带参数的构造函数同时没有无参重载的情况下,那么在子类中,你必须对父类的带参数的构造进行赋值,也就是实参!

    代码如下:

    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关键字及对应父类构造函数需要的参数。

     

    以上就是所有的解决方法。

    有好的建议,请在下方输入的评论。

关键字C#