C#中带有对基方法调用的多重继承


using System;               

public class A
{
public  virtual string GetDataFromA()
{
return "This Is base Class A" ;  
}
}
public class B
{
public  virtual string GetDataFromB()
{
return "This Is base Class B" ;  
}
}
public class C : B,A
{
public overide string GetDataFromB()
{
var data = base.GetDataFromB();
return data + "This Is child Class C";
}
public overide string GetDataFromA()
{
var data = base.GetDataFromB();
return data + "This Is child Class C";
}
}
public class Program
{
public static void Main()
{
var myCobject = new c();
c.GetDataFromB();
c.GetDataFromA();
}
}

这是一个简单的问题,我知道我们不能在C#中使用多重继承,这就是我们使用接口的原因。但我的问题是,当我使用多重继承时,我如何调用基类方法如果我遗漏了什么,请告诉我。我想在C类中调用A和B基类方法同时我想调用子类方法中的基类方法A和B

如果你了解"组合而非继承"的想法,你可以通过下面的代码来解决你的问题。我们选择作文的原因可以在这个链接中解释(https://medium.com/humans-create-software/composition-over-inheritance-cb6f88070205)。还有一些其他方法可以解决这个问题,其中之一就是decorator模式。但为了简单起见,构图已经足够好了。

public class A
{
public  virtual string GetDataFromA()
{
return "This Is base Class A" ;  
}
}
public class B
{
public  virtual string GetDataFromB()
{
return "This Is base Class B" ;  
}
}
public class C
{
private readonly _aService = new A();
private readonly _bService = new B();
public overide string GetDataFromB()
{
var data = _bService.GetDataFromB();
return data + "This Is child Class C";
}
public overide string GetDataFromA()
{
var data = _aService.GetDataFromB();
return data + "This Is child Class C";
}
}
public class Program
{
public static void Main()
{
var myCobject = new c();
c.GetDataFromB();
c.GetDataFromA();
}
}

它有变得一团糟的风险。简单的解决方案是类组成,如下所示:

public class A
{
public void GetData()
{
Console.WriteLine("Data coming from A");
}
}
// Here we use composition over inheritance.
public class B
{
A _a;
public B()
{
_a = new A();
}
public virtual void GetData()
{
_a.GetData();
Console.WriteLine("Data coming from B");
}
}
public class C : B 
{
public override void GetData()
{
base.GetData();
Console.WriteLine("Data coming from C");
}
}

现在,像这样使用,你可以使用以下代码:

var c = new C();
c.GetData();

产生输出:

Data coming from A
Data coming from B
Data coming from C

进一步注意:您也可以很容易地将composition应用于BC类,就像我对AB所做的那样。

最新更新