Esta pregunta me vino a la mente mientras estoy leyendo el puesto Why doesn't C# support multiple inheritance? de MSDN Blog.problema de herencia múltiple en C#
Al primer vistazo a la siguiente código:
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class A
{
int num;
public A()
{
num = 0;
}
public A(int x)
{
num = x;
}
public override int GetHashCode()
{
return num + base.GetHashCode();
}
}
class B : A
{
int num;
public B()
{
num = 0;
}
public B(int x)
{
num = x;
}
public override int GetHashCode()
{
return num + base.GetHashCode();
}
}
class Program
{
static void Main(string[] args)
{
A a = new A();
B b = new B();
Console.Write(a.GetHashCode() + " " + b.GetHashCode());
Console.Read();
}
}
}
Object
class is the ultimate base class of all classes. Por lo tanto, es la clase base de A
y B
tanto en mi programa y también hacer A
como una clase base de B
. Entonces, B
tiene ahora dos clases base, una es A
y otra es Object
. Anulo un método GetHashCode()
de Object
Class en la clase A
y B
ambos. Pero en la clase B
, el método base.GetHashCode()
devuelve el valor de retorno del método GetHashCode()
de la clase A
. Pero quiero este valor desde Object
class. ¿Cómo puedo obtener eso?
Dudo mucho que usted puede hacer esto. ¿Alguna posibilidad de ampliar el razonamiento detrás de por qué querrías hacer eso? Sin embargo, dejaré que las mentes más inteligentes te den una respuesta más definitiva. Sé que no puedes hacerlo solo con el código C#, pero tal vez sea posible a través de la reflexión. –
También tenga en cuenta que "herencia múltiple" y su problema son dos problemas ortogonales, sin relación alguna. La herencia múltiple sería para que usted declare una clase C que hereda de A y B. –
Creo que Lasse es correcto. Esto no es posible, ciertamente no sin reflexión. Sin embargo, la pregunta es por qué querrías hacer esto en primer lugar. – Noldorin