Est-il possible de faire en sorte qu'un type anonyme implémente une interface ?
J'ai un morceau de code que j'aimerais faire fonctionner, mais je ne sais pas comment m'y prendre.
J'ai eu quelques réponses qui disaient soit non, soit créer une classe qui implémente l'interface et construire de nouvelles instances de celle-ci. Ce n'est pas vraiment l'idéal, mais je me demande s'il existe un mécanisme permettant de créer une classe dynamique fine au-dessus d'une interface, ce qui simplifierait les choses.
public interface DummyInterface
{
string A { get; }
string B { get; }
}
public class DummySource
{
public string A { get; set; }
public string C { get; set; }
public string D { get; set; }
}
public class Test
{
public void WillThisWork()
{
var source = new DummySource[0];
var values = from value in source
select new
{
A = value.A,
B = value.C + "_" + value.D
};
DoSomethingWithDummyInterface(values);
}
public void DoSomethingWithDummyInterface(IEnumerable<DummyInterface> values)
{
foreach (var value in values)
{
Console.WriteLine("A = '{0}', B = '{1}'", value.A, value.B);
}
}
}
J'ai trouvé un article Habillage dynamique des interfaces qui décrit une approche. Est-ce la meilleure façon de procéder ?
1 votes
Le lien semble obsolète, ceci pourrait être une alternative appropriée. liensberger.it/web/blog/?p=298 .
2 votes
Oui, vous pouvez le faire avec .NET 4 et plus (via le DLR), en utilisant la fonction ImpromptuInterface paquet nuget.
1 votes
@PhilCooper Votre lien est en panne, probablement depuis au moins 2016 - mais heureusement, il a été archivé avant. web.archive.org/web/20111105150920/http://www.liensberger.it/
0 votes
En C#9, vous pouvez utiliser des enregistrements ( devblogs.microsoft.com/dotnet/welcome-to-c-9-0 ) Je sais que ce n'est pas la même chose mais c'est aussi une approche très légère pour implémenter des interfaces "simples" :)