Ich habe eine Schnittstelle:Generics wobei T implementierende Klasse Schnittstelle
interface IProfile { ... }
... und eine Klasse:
[Serializable]
class Profile : IProfile
{
private Profile()
{ ... } //private to ensure only xmlserializer creates instances
}
... und einen Manager mit Methode:
class ProfileManager
{
public T Load<T>(string profileName) where T : class, IProfile
{
using(var stream = new .......)
{
var ser = new XmlSerializer(typeof(T));
return (T)ser.Deserialize(stream);
}
}
}
Ich erwarte, dass die Methode wie folgt verwendet wird:
... und werfen Zeitfehler auf diese kompilieren:
var profile = myManager.Load<IProfile>("TestProfile"); // NO! IProfile interface entered!
jedoch alles kompiliert und nur Laufzeitfehler wird durch die XmlSerializer
geworfen.
Ich dachte, die where T : class
würde sicherstellen, nur Klassen-Typen, wo akzeptiert?
Ist es möglich, den Compiler-Fehler zu werfen, wenn IProfile
(oder andere Schnittstellen, die von IProfile
erben) eingegeben wird, und nur Klassen akzeptiert werden, die IProfile
implementieren?
welche Fehler ausgelöst durch 'XmlSerializer'? – Default
@Default das ist egal. Das Problem hierbei ist, dass "T" eine Schnittstelle sein kann, obwohl es eine "Klassen" -Bedingung gibt. – Stijn
@Default: InvalidOperationException {"IProfile kann nicht serialisiert werden, da kein parameterloser Konstruktor vorhanden ist"} – Anders