C#中的多重继承
在C#语言中是没有多重继承功能的,如果我们在项目应用需要用多重继承来实现一些功能的时候,也还是可以做到的,虽然不是太方便。在C#语言中,类是不能多重继承的,但是接口可以多重继承。因此在此实现多继承的原理就是,为每个类建立具有相同方法名的接口,并实现这些接口,然后在子类中继承这些接口,并将实现的类作为子类的字段。
开发环境:VS2005 .NET2.0
项目下载地址:MuiltExtends.zip
///BookBase.cs using System; namespace XFish.Demo { /// <summary> /// 书的基类 /// </summary> public abstract class BookBase { #region 类初始化 public BookBase() { } #endregion } }
///IAuthor.cs using System; using System.Collections.Generic; using System.Text; namespace XFish.Demo { /// <summary> /// 作者类的接口 /// </summary> public interface IAuthor { string GetName(); void SetName(string name); void SetEmail(string email); string GetEmail(); } }
///Author.cs using System; namespace XFish.Demo { /// <summary> /// 作者 /// </summary> public class Author : BookBase,IAuthor { #region 类内部变量 private string _Name; private string _Email; #endregion #region 类初始化 public Author() { _Name = "虞晓杰"; _Email = "fishyxj@sina.com"; } #endregion #region 类方法 /// <summary> /// 显示作者的姓名 /// </summary> public string GetName() { return _Name; } /// <summary> /// 设置作者的姓名 /// </summary> /// <param name="name">作者姓名</param> public void SetName(string name) { _Name = name; } /// <summary> /// 设置Email /// </summary> /// <param name="email">Email地址</param> public void SetEmail(string email) { _Email = email; } /// <summary> /// 获取Email /// </summary> /// <returns></returns> public string GetEmail() { return _Email; } #endregion } }
///IContents.cs using System; using System.Collections.Generic; using System.Text; namespace XFish.Demo { /// <summary> /// 内容的接口 /// </summary> public interface IContents { string GetChapter(int chapter); } }
///Contents.cs using System; using System.Collections.Generic; using System.Text; namespace XFish.Demo { /// <summary> /// 内容 /// </summary> public class Contents:BookBase,IContents { #region 类内部变量 private List<string> _Chapters; #endregion #region 类初始化 public Contents() { _Chapters = new List<string>(); _Chapters.Add("第一章 态度决定一切"); _Chapters.Add("第二章 学无止境"); _Chapters.Add("第三章 交付用户想要的软件"); } #endregion #region 类方法 /// <summary> /// 获取章节 /// </summary> /// <param name="chapter">章节序号</param> /// <returns>章节内容</returns> public string GetChapter(int chapter) { chapter -= 1; if (0 <= chapter && chapter < _Chapters.Count) return _Chapters[chapter]; return string.Empty; } #endregion } }