W Visual Studio mogę kliknąć interfejs prawym przyciskiem myszy i wybrać opcję Implementuj interfejs lub Implementuj interfejs jawnie.
public class Test : ITest
{
public string Id // Generated by Implement Interface
{
get { throw new NotImplementedException(); }
}
string ITest.Id // Generated by Implement Interface Explicitly
{
get { throw new NotImplementedException(); }
}
}
Jedyną różnicą, jaką widzę między nimi, jest to, że nazwa interfejsu jest dodawana do właściwości i metod interfejsu, gdy są tworzone, jeśli zdecydujesz się na implementację interfejsu w sposób jawny.
Uważam, że sprawia, że kod jest nieco bardziej czytelny, ponieważ widzę, skąd pochodzi ta metoda / właściwość, ale czy ma to jakikolwiek wpływ na sposób użycia lub kompilacji klasy? Czy to naprawdę ma znaczenie, jeśli implementuję moje interfejsy w sposób dorozumiany lub jawny?
Istnieje również różnica w sposobie wywoływania metody.
Korzystając z jawnej implementacji interfejsu, należy użyć typu interfejsu, aby wywołać tę konkretną implementację.
Tak więc, przy wywoływaniu kodu musisz użyć zmiennej typu
ITest
, aby uzyskać dostępITest.Id
.Artykuł Jawna implementacja interfejsu (C # Programming Guide) na MSDN ma dobry przykład.
źródło
Pozwala zaimplementować dwa interfejsy, które definiują tę samą metodę. Jeśli jednak jawnie zaimplementujesz interfejs, dostęp do metod będzie możliwy tylko wtedy, gdy zmienna zostanie wpisana do tego jawnego interfejsu.
Zobacz: Samouczek implementacji interfejsu jawnego
źródło
EDYCJA:
To nie powinno mieć znaczeniaNie powinieneś tego robić, chyba że twoja klasa zaimplementuje dwa interfejsy o takich samych właściwościach, ponieważ będziesz musiał rzutować na odpowiedni interfejs, zanim będziesz mógł uzyskać dostęp do członka:Przykładowe użycie zachodzi, gdy jawnie implementujesz element interfejsu, nawet jeśli używasz tylko jednego interfejsu (o czym zawsze zapominam: S), więc starałbym się unikać implementacji jawnej, gdy tylko jest to możliwe, ponieważ ukryje członków klasy, jeśli „ nie jest przesyłany do odpowiedniego interfejsu (co jest dość mylące).
źródło
Na podstawie odpowiedzi Jalayana:
źródło