private static void TestStructInterface()
{
IFoo foo1 = new FooClass(); // works
IFoo foo2 = new FooStruct(); // works
IEnumerable<IFoo> foos1 = new List<FooClass>(); // works
IEnumerable<IFoo> foos2 = new List<FooStruct>(); // compiler error
}
interface IFoo
{
string Thing { get; set; }
}
class FooClass : IFoo
{
public string Thing { get; set; }
}
struct FooStruct : IFoo
{
public string Thing { get; set; }
}
Der Compiler beschwert Umsetzung:Struct vs Klasse eine Schnittstelle
kann nicht implizit konvertiert Typ 'System.Collections.Generic.List <Tests.Program.FooStruct>' auf ‚System.Collections.Generic. IEnumerable <Tests.Programm.IFoo> '. Es gibt eine explizite Konvertierung (fehlt Ihnen ein Cast?)
Warum?
Warum gibt es einen Unterschied zwischen Klassen und Strukturen? Problemumgehungen?
siehe Frage SO http://stackoverflow.com/questions/13049/whats-the-difference-between-struct-and-class-in-net Und akzeptierte Antwort: http://stackoverflow.com/a/13275/1155847 –
Auch hier: http://stackoverflow.com/questions/9688268/why-cannot-ienumerablestruct-be-cast-as-ienumerableobject –
Nur eine Nebensache über Terminologie: Schnittstellen sind "implementiert", nicht "vererbt". –