Ich fange an, mich in Extension-Methoden zu verlieben, aber ich weiß nur nicht, wie man eine EM nur für einen bestimmten Objekttyp erstellt.Wie kann ich eine gemeinsame Erweiterungsmethode auf mehrere nicht verwandte Typen in einem SDK eines Drittanbieters anwenden?
Ich habe zum Beispiel:
public static void AddPhoneNumberToContact(this Contact contact, PhoneType type, String number)
{
lock (contact)
{
PhoneRow pr = PhoneRow.CreateNew();
pr.SetDefaults();
pr.PtypeIdx = type;
pr.PhoneNumber = number;
contact.Phones.Add(pr);
pr = null;
}
}
Mein Problem ist, dass ich diese Methode in der Person Objekt auch haben will, und das ist, warum ich
AddPhoneNumberToContact
AddPhoneNumberToPerson
genannt Gibt es eine Möglichkeit zu haben AddPhoneNumber und beschäftigen sich mit dem Objekt, das zur Verfügung gestellt wird?
oder die Lösung
public static void AddPhoneNumber(this object contact, ...
{
...
if(typeof(Contact) == contact)
((Contact)contact).Phones.Add(pr);
else if(typeof(Person) == contact)
((Person)contact).Phones.Add(pr);
}
Danke zu haben.
wie das mit Schlössern Watch out. Wenn der Anrufer von AddPhoneNumberToContact diese Sperre nicht kennt und Contact selbst vor dem Anruf sperrt, haben Sie einen garantierten Deadlock. Normalerweise sperre ich ein privates Objekt. Mit Erweiterungsmethoden ist dies jedoch nicht möglich. – Mendelt
Bitte bearbeiten Sie den Beitrag, um zu verdeutlichen, dass diese Klassen nicht geändert werden können. Und auch die Vererbungshierarchie. –
@Anton Gogolev Es ist genau dort im Titel! "3rd party SDK" – balexandre