【问题标题】:How to use one base class and one abstract together in a class如何在一个类中同时使用一个基类和一个抽象
【发布时间】:2019-08-24 17:36:16
【问题描述】:

我有一个类已经继承了基类,我需要使用另一个抽象类的一些函数。如何做到这一点,因为一个类不能继承多个类。

public Class ABC : BaseClass, SomeAbstractClass
{
}

需要具备以上功能。有人可以帮我在 C# 中做到这一点。

【问题讨论】:

    标签: .net oop c#-4.0


    【解决方案1】:

    你不能。与 C++ 不同,C# 不支持多个基类。

    你可以做的是继承抽象类,并实现一个从基类中提取的接口——而不是从基类继承,而是拥有它的类型的字段(简而言之,使用组合而不是继承) :

    public Class ABC : SomeAbstractClass, IBaseClass
    {
        private IBaseClass _base;
    
        // initialize the IBaseClass in your constructor:
    
        public ABC(int a, string b)
            : base(a) // assume a constructor that takes an int on the abstract class
        {
            _base = new BaseClass(b); // assume a constructor that takes a string on the base class
        }
    
        // or a constructor for Dependency Injection:
        public ABC(int a, IBaseClass baseClass)
            : base(a)
        {
             _base = baseClass;
        }
    
        // implement the interface like this:
    
        public int SomeIBaseClassMethod(string a, int b)
        {
            return _base.SomeBaseClassMethod(a, b);
        }
    
        public bool IsValid 
        {
            get {return _base.IsValid;} 
            set {_base.IsValid = value}
        }
    }
    

    【讨论】:

      【解决方案2】:

      C# 不支持多重继承。你可以做的是实现不同的接口。

      public class ABC: BaseClass, ISomeOtherInterface {
      
      }
      

      【讨论】:

      • 那么如何在接口中使用 SomeAbstractClass 呢?
      • 这个SO entry描述了多个接口的使用...
      • @PeterSchneider - 关键是,他们不能只实例化抽象类并包装它或其他类似的东西。更好的建议是从抽象类继承(无论如何都必须继承它才有用)并包装一个 BaseClass 实例。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      • 2012-04-03
      • 2012-11-15
      • 2018-06-28
      • 1970-01-01
      • 1970-01-01
      • 2018-04-01
      相关资源
      最近更新 更多