抽象类和接口

本文探讨了抽象类和接口在编程中的作用。通过实例解释了为何有时需要使用抽象类,即抽象类可以作为一个接口的集合,同时允许添加额外的方法。同时阐述了接口的主要功能,即允许一个类实现多个接口,以达到多继承的效果。文章以五官和四肢为例,说明了如何根据对象的特性选择使用接口或抽象类,并指出这有助于代码的复用和组织。作者承认理解过程中的混乱,并欢迎读者指正错误。
摘要由CSDN通过智能技术生成

今天闲下来看代码,因为自己的基础实在是太差了,然后就看到代码里面的一个基础接口和基础类

public abstract class ViewModelBase : NotifyPropertyChanged, IViewModel
    {
        private bool isloaded = false;
        public bool IsLoaded { 
            get { return isloaded; }
            set { isloaded = value; }
        }
        public object ViewModelPayload { get; set; }
        public IView View { get; protected set; }

        /// <summary>
        /// ViewModel所在页的Title
        /// </summary>
        public string TabTitle { get; set; }

        public string ViewModelID { get; set; }
        public string CurrentLanguage { get; set; }

        public Action<string> SetNewViewTitle { get; set; }

        public virtual void AutoReceiveMessage(IPublisher<LocalMessage> publisher, LocalMessage message) { }

        /// <summary>
        /// 初始化View
        /// </summary>
        /// <param name="ViewModelPayload"></param>
        public virtual void InitialView(object ViewModelPayload) { }
        /// <summary>
        /// 刷新
        /// </summary>
        /// <param name="ViewModelPayload"></param>
        public virtual void Referesh(object ViewModelPayload) { }

        /// <summary>
        /// 模块加载
        /// </summary>
        public virtual void Loaded() { }

        /// <summary>
        /// 模块卸载
        /// </summary>
        public virtual void UnLoaded() { }

        /// <summary>
        /// 离开当前模块
        /// </summary>
        public virtual void Leave() { }
        /// <summary>
        /// 切换界面语言
        /// </summary>
        public virtual void LanguageChange(string lang) { }
    }
public interface IViewModel : ISubscriber<LocalMessage>
    {
        bool IsLoaded{ get; set; }
        object ViewModelPayload { get; set; }
        IView View { get; }

        string ViewModelID { get; set; }
        string CurrentLanguage { get; set; }

        /// <summary>
        /// ViewModel所在页的Title
        /// </summary>
        string TabTitle { get; set; }

        Action<string> SetNewViewTitle { get; set; }

        void InitialView(object ViewModelPayload);

        void Referesh(object ViewModelPayload);
        /// <summary>
        /// ViewModel加载
        /// </summary>
        void Loaded();

        /// <summary>
        /// ViewModel卸载
        /// </summary>
        void UnLoaded();

        /// <summary>
        /// 离开当前模块
        /// </summary>
        void Leave();
        /// <summary>
        /// 切换界面语言
        /// </summary>
        void LanguageChange(string lang);
    }

其实我很不明白为什么一定要用个抽象类来实现它,后来才知道这是由它们的定义决定的:
一个类只能extends一个父类,但可以implements多个接口。
站在面向对象的角度,我们按照某些维度的特性把一些相似的对象和相关方法在一起封装成一个接口,然后就有很多不同的接口。这个时候创建了一个类,它可能要用到几个接口里面的对象和方法,那么它就能去实现(implements)这些接口。
就好比鼻子眼睛嘴巴属于五官,听声音,看东西,吃东西属于方法,我们可以把它们都定义在一个五官接口里面,然后手,脚,行走,这些又可以把它定义在另一个四肢接口里。然后这个时候我们可以定义一个哺乳类去实现这两个接口,再用人类去继承哺乳类。但是这个时候我想写一个鱼类,鱼类可以复用实现五官接口,但是不需要实现四肢接口。这样的话,很多五官的相关方法我就不用在鱼类里面再写一遍了。
那么抽象类又是什么呢?抽象类是合并又是扩展,怎么说呢?就是它拥有它实现的所有接口的对象和方法,但是也可以自己定义属于自己的方法。相当于一个接口集装箱。上面的哺乳类就可以是一个抽象类。
而普通的类就是真正用于实际场景中的类了,具体以后再说吧。写这篇文章只是为了便于自己理解。比较混乱。有错误的地方欢迎留言指正。一个小白的成长之路。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值