ToString w interfejsie?

0

Siemka!
Czy w interfejsie powinno się umieszczać metodę ToString czy Equal? Chyba wypada tak robić ale chciałbym się upewnieć
Pozdrawiam

0

Jeżeli mowa o metodach z typu object to nie.

The members of an interface are the members declared in the interface and in all base interfaces of the interface. The members in class object are not, strictly speaking, members of any interface (13.2). However, the members in class object are available via member lookup in any interface type (7.4).

Ponadto, wszystko, co może zaimplementować interfejs i tak będzie dziedziczyć po object (a raczej według specyfikacji: może zostać do niego niejawnie skonwertowana oraz możesz wołać te metody bez tej konwersji - sprawa jest tutaj trochę zawiła).

0

Możesz umieścić, ale to nic właściwie nie da: metoda Object.ToString() "zadowoli" twojego ToStringa z interfejsu i nie wymusisz w ten sposób przeładowania tej metody w klasie implementującej.

0

Ja tak z innej strony szukam sobie o interfejsach, ale tak na prawdę to po co się z nich korzysta?

0

By stworzyć abstrakcję, która może być dziedziczona. W językach takich jak C# czy Java gdzie nie ma wielodziedziczenia dana klasa może posiadać wiele interfejsów, ale tylko jedną klasę rodzica.

0

Po to żeby nadać niezwiązanym ze sobą obiektom te same funkcjonalności. Na przykład chcesz napisać uniwersalną funkcję sortującą. Co byłoby jej argumentem? Jaka klasa? Object? A skąd pewność że obiekty tego typu da się porównywać?
Dlatego też tworzy sie interfejs z pewnymi metodami które trzeba zaimplementować. Robisz na przykład interfejs Comparable z metodą compareTo() i masz pewność że każdy obiekt implementujący ten interfejs może być porównany z drugim takim obiektem. W związku z tym możesz teraz napisać swoją funkcję sortującą a jako jej argument mieć kolekcje obiektów Comparable :)
W efekcie możesz nią sortować dowolne obiekty o ile implementują twój interfejs.

0

Prosty przykład. Założenia: każda ważniejsza klasa posiada metodę/właściwość zwracającą informacje o wykonanej ostatnio akcji, której przeznaczenie jest trafić do loga. Metoda wpisująca do loga znajduje się w klasie Logger. Pisanie metody w jakimś abstract nie ma sensu bo klasy nie mają ze sobą nic wspólnego. Chcesz jednak dla nich wspólne zachowanie. No to jedziesz.

interfejs:

public interface ILogInformer  //nazwy mi się nie chciało wymyślać ;P
{
   public GetLastActionInfo { get; private set; }
}

wykorzystanie:

class Logger
{
    (...)
    public void Log(ILogInformer informer)
    {
       logfile.WriteLine(informer.GetLastActionInfo); 
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1