Nur Eigenschaften, die eine Schnittstelle implementieren
Ich habe eine Klasse, die eine Schnittstelle implementiert. Ich möchte nur prüfen, die Eigenschaft Werte, die mein interface implementieren.
So, zum Beispiel, sagen wir ich habe dieses interface:
public interface IFooBar {
string foo { get; set; }
string bar { get; set; }
}
Und diese Klasse:
public class MyClass :IFooBar {
public string foo { get; set; }
public string bar { get; set; }
public int MyOtherPropery1 { get; set; }
public string MyOtherProperty2 { get; set; }
}
So, ich brauche, um dies zu erreichen, ohne die magic-strings:
var myClassInstance = new MyClass();
foreach (var pi in myClassInstance.GetType().GetProperties()) {
if(pi.Name == "MyOtherPropery1" || pi.Name == "MyOtherPropery2") {
continue; //Not interested in these property values
}
//We do work here with the values we want.
}
Wie kann ich diese ersetzen:
if(pi.Name == 'MyOtherPropery1' || pi.Name == 'MyOtherPropery2')
Anstatt zu überprüfen, um zu sehen, ob mein name der Eigenschaft ist ==
einen magic string, ich möchte einfach überprüfen, um zu sehen, wenn die Eigenschaft implementiert ist, von meinem interface.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warum reflektion verwenden, wenn Sie wissen, die Schnittstelle vor der Zeit? Warum nicht einfach testen, wenn es die Schnittstelle implementiert, dann warf zu, dass?
Wenn Sie wirklich müssen reflektion verwenden, rufen Sie die Eigenschaften auf den Typ des interfaces, so verwenden Sie diese Zeile, Eigenschaften:
var a = new List<int>(); var b = new List<string>(); IList c = a; c = b;
kompilieren und ausführen.Ich Stimme Ihnen zu, dass es so aussieht, wie Sie wollen zu werfen, um die Schnittstelle, als Paul T. schlägt.
Die Informationen, die Sie zu Fragen, jedoch gibt es in der
InterfaceMapping
- Typ, erhältlich von derGetInterfaceMap
Methode derType
Instanz. Vonhttp://msdn.microsoft.com/en-us/library/4fdhse6f(v=VS.100).aspx
"Der interface-Karte bezeichnet, wie eine Schnittstelle zugeordnet ist, in die eigentlichen Methoden einer Klasse, die diese Schnittstelle implementiert."
Beispiel:
Vielleicht eine sekundäre Schnittstelle:
Fügen Sie die zweite Schnittstelle:
Und testen, wie diese:
Können Sie Durchlaufen typeof(T).GetInterfaces und rufen GetProperties() auf jedem von Ihnen.
Referenz: http://msdn.microsoft.com/en-us/library/system.type.getinterfaces.aspx