Ich versuche diese generische Methode zu erstellen, um die Dinge zu vereinfachen, aber ich denke, ich habe es versaut! Kannst du mir bei meinem Problem helfen?Generic mit mehreren Klassen
Dies kompiliert:
private string ConcatenateText<T1, T2>(MyEntity myEntity)
where T1 : Supplier, new()
where T1 : Employee, new()
where T2 : SupplierDepartment, new()
where T2 : EmployeeDepartment, new()
{
T1 p = new T1();
T2 r = new T2();
//Code here for myEntity treatment
return mystring;
}
Während dies nicht kompiliert:
protected void mybutton1_Click(object sender, EventArgs e)
{
string mystring = ConcatenaText<Supplier, SupplierDepartment>(myEntity);
}
//This does not compile
protected void mybutton2_Click(object sender, EventArgs e)
{
string mystring = ConcatenaText<Employee, EmployeeDepartment>(myEntity);
}
Nachricht: Der Typ Lieferant nicht als Typ-Parameter T1 in dem generischen Typ oder Methode ConcatenateText verwendet werden können (MyEntity myEntity). Es gibt keine implizite Referenzkonvertierung vom Lieferanten zum Mitarbeiter
Kann dies getan werden? Was mache ich falsch? Kann es verbessert werden?
EDIT:
Und MyEntity ist nur eine andere Klasse, um es in dieser generischen Methode zu verarbeiten! Es ist nicht mit den Typen T verwandt. Es ist nur ein Argument. Aber es ist klar, dass ich das nicht tun kann, indem ich 2 Typen verwende. Ich dachte, dass ich das eine oder andere zuordnen könnte und die CLR unabhängig von meiner Initialisierung reagieren könnte wie ich wollte. Ich werde die Antwort akzeptieren, die ein bisschen mehr Informationen darüber gibt.
oops, während ich meine Antwort schrieb zwei weitere erschien und fast die gleiche –
Große Antwort sagen, aber wenn ich mich richtig erinnern Sie können nicht mehrere Klassen auf eine Klasse überlasten. So ist Interface und Generic in diesem Beispiel eine gute Alternative. –
@ TarıkÖzgünGüner Überladung und Override nicht verwechseln. –