Questa domanda mi è venuta in mente mentre mi sto leggendo il palo Why doesn't C# support multiple inheritance? da MSDN Blog.multipla problema di successione in C#
Al primo sguardo il seguente codice:
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. Quindi è la classe base di A
e B
entrambi nel mio programma e anche fare A
come classe base di B
. Quindi, B
ha ora due classi base, una è A
e un'altra è Object
. Eseguo l'override di un metodo GetHashCode()
di Object
Class nella classe A
e B
entrambi. Tuttavia, nella classe B
, il metodo base.GetHashCode()
restituisce il valore restituito del metodo GetHashCode()
della classe A
. Ma voglio questo valore da Object
class. Come posso averlo?
io dubito molto che si può fare questo. Qualche possibilità di espandere il ragionamento sul perché vorresti farlo? Lascerò che le menti più sagge ti diano una risposta più definitiva. So che non puoi farlo solo con il codice C#, ma forse è possibile attraverso la riflessione. –
Si noti inoltre che "ereditarietà multipla" e il problema sono due problemi ortogonali, completamente non correlati. L'ereditarietà multipla potrebbe essere per te dichiarare una classe C che eredita sia da A che da B. –
Credo che Lasse sia corretta. Questo non è possibile, certamente non senza riflessione. La domanda è: perché vorresti farlo in primo luogo? – Noldorin