Hier einen Dummy-Code mein Problem verwenden erstellen zu erklären:Dynamisch einen generischen Typen, der den Typen selbst als generischer Parameter
public class A<TX, TA> where TA : A<TX, TA>
{
}
public void Do()
{
var doy = typeof(A<,>).MakeGenericType(typeof(string), null/*??????*/));
}
Wie kann ich eine Art von meiner gattungsgemäßen Art zu machen, wenn ich nicht identifty kann meine Typ um es als Parameter zu verwenden?
Danke für Ihre Hilfe.
bearbeiten, Beispiel statisch tun:
public abstract class A<TX, TA> where TA : A<TX, TA>
{
public TA ChainMethod()
{
return (TA)this;
}
}
public class AConcrete : A<string, AConcrete>
{
public AConcrete OtherMethod()
{
return this;
}
}
public class App
{
public static void Start()
{
new AConcrete().ChainMethod().ChainMethod().OtherMethod();
}
}
Wenn dies das CRTP ist - es wird wirklich hässlich werden; Wie würdest du es in C# ausdrücken? 'A
Sie können nicht. Aber das Hinzufügen von "dynamisch" ist ein Ablenkungsmanöver - es gibt keine Möglichkeit, dies * statisch * zu tun. 'A' - wie soll ich das "???" erweitern? Es muss irgendwo eine Basis geben. Die Klasse selbst ist legal, aber Sie benötigen mindestens eine andere Klasse, um sie zu starten. [Eric Lipperts Kommentare] (https://blogs.msdn.microsoft.com/ericlippert/2011/02/03/curiousser-and-curiouser/), dass dies verwirrend ist und möglicherweise nicht das erreicht, was Sie wollen, bleibt trotzdem gültig. –
Können Sie eine höhere Anforderung erklären? – Andrei