今天闲下来看代码,因为自己的基础实在是太差了,然后就看到代码里面的一个基础接口和基础类
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)这些接口。
就好比鼻子眼睛嘴巴属于五官,听声音,看东西,吃东西属于方法,我们可以把它们都定义在一个五官接口里面,然后手,脚,行走,这些又可以把它定义在另一个四肢接口里。然后这个时候我们可以定义一个哺乳类去实现这两个接口,再用人类去继承哺乳类。但是这个时候我想写一个鱼类,鱼类可以复用实现五官接口,但是不需要实现四肢接口。这样的话,很多五官的相关方法我就不用在鱼类里面再写一遍了。
那么抽象类又是什么呢?抽象类是合并又是扩展,怎么说呢?就是它拥有它实现的所有接口的对象和方法,但是也可以自己定义属于自己的方法。相当于一个接口集装箱。上面的哺乳类就可以是一个抽象类。
而普通的类就是真正用于实际场景中的类了,具体以后再说吧。写这篇文章只是为了便于自己理解。比较混乱。有错误的地方欢迎留言指正。一个小白的成长之路。