试图继承三个基类而不能

Pet*_*ter 28 c# inheritance multiple-inheritance

我有几个与User课堂设计有关的问题,但它们不同,我认为它们应该是独立的问题.

所以,第一个与基类的继承有关.我目前继承两个类,ProfileBaseISessionMgrEntry为这样的:

public class User : ProfileBase, ISessionMgrEntry
Run Code Online (Sandbox Code Playgroud)

但是,我还想继承第三个类MembershipUser,如下所示:

public class User : ProfileBase, MembershipUser, ISessionMgrEntry
Run Code Online (Sandbox Code Playgroud)

但是,编译器不会让我这样做.为什么?而且,我该如何解决这个问题呢?

谢谢.

PS - ASP.NET 3.5/C#

编辑

你好.我认为以下解决方案可能适用于我想要实现的目标.看起来非常简单直接.我这样做,所以我可以创建一个完整/组合的User对象.有没有人看到任何可能导致问题的原因?我在叮叮当当时出现的是重叠属性.例如,两者MembershipUserProfileBase分享" UserName".我应该选择其中一个还是这个设计缺陷?建议?再次感谢.

 public class User
    {

        #region Constructors
            private readonly MembershipUser _MembershipUser;
            private readonly ProfileBase _ProfileBase;
        #endregion

        public User()
        {
            _MembershipUser = new MembershipUser();
            _ProfileBase = new ProfileBase();

        }

        public string Comment
        {
            get { return _MembershipUser.Comment as string; }
            set { _MembershipUser.Comment = value; }
        }

        public bool IsAnonymous
        {
            get { return _ProfileBase.IsAnonymous as bool; }
        } 

        ....

   }
Run Code Online (Sandbox Code Playgroud)

Chr*_*isF 40

在第一个示例中,您实际上并不是从两个类继承,而是从一个类和一个接口继承.

C#不允许从类中继承多个,但允许您实现多个接口.有关原因的详细信息,请参阅此MSDN博客文章.

您必须IMembershipUser在您的User课程中创建一个界面并实现它.

接口通常根据前缀为的具体类名给出名称I.所以这个类MembershipUser会有一个接口IMembershipUser.没有什么可以阻止你使用其他名称,但使用接口的每个人都习惯于这个命名约定.


Jam*_*Ide 7

C# 只支持单继承。您可以将您的类链接在一起(即MembershipUser继承自ProfileBase)或使用interfaces.


nWo*_*orx 7

在c#中,您可以从一个类继承,但可以根据需要实现任意数量的接口.在你的情况下ProfileBase,MembershipUser是类,ISessionMgrEntry是一个接口.