4. díl - Interface pro kontakt, Adaptee Wrapper a komparátor - ISIM

C# .NET Pro pokročilé Instant Messenger Interface pro kontakt, Adaptee Wrapper a komparátor - ISIM

ISIMContact.cs

Nejprve si navrhneme předlohu našeho kontaktu - jeho vlastnosti

public interface ISIMContact
{
        string id { get; }
        string name { get; set; }
        Global.Availability availability { get; set; }
        string protocol { get; }
        bool unreadedMessage { get; set; }
        object contactObject { get; }
}

Ten se poté bude dědit a udělá se tzv. Adapter Wrapper návrhový vzor: http://www.itnetwork.cz/…avrhovy-vzor Jde o to, že máme třídu, která je podle naší předlohy, obsahuje dané vlastnosti a původní objekt kontaktu z dané knihovny.

Aby jsi měl nějakou představu jak to bude vypadat:

public class TestContact : ISIMContact
{
        CizíTřídaKontaktu kontakt;
        public TestContact(CizíTřídaKontaktu kontakt)
        {
                this.kontakt = kontakt;
                this.name = kontakt.P_NAME;
                this.availability = Global.Converter.GetContactAvailability(kontakt.P_STATUS);
                this.unreadedMessage = false;
        }

        public string id
        {
                get { return kontakt.P_IDENTIFICATOR; }
        }

        public string name
        {
                get;
                set;
        }

        public Global.Availability availability
        {
                get;
                set;
        }

        public string protocol
        {
                get { return "Testovací"; }
        }

        public bool unreadedMessage
        {
                get;
                set;
        }

        public object contactObject
        {
                get { return null; }
        }
}

Komparátor bude fungovat jednoduše, dostupnost se seřadí dle priority (integer) a za to se přiřadí jméno. Pak se použije stringový komparátor a pohodička:

/// <summary>
/// Porovnává nejdřív podle dostupnosti a pak podle jména. Jednoduše přičte ke jménu dostupnost a porovná -> 1David. Je to do 6tky takže neřešim :P
/// </summary>
public class ISIMcontactComparer : IComparer
{
        public int Compare(object x, object y)
        {
                int result = -1;
                try
                {
                        string c1 = (int)(x as ContactListViewItem).contact.availability + (x as ContactListViewItem).contact.name;
                        string c2 = (int)(y as ContactListViewItem).contact.availability + (y as ContactListViewItem).contact.name;

                        result = string.Compare(c1, c2);
                }
                catch (NullReferenceException)
                {
                        result = -1;
                }
                return result;
        }
}

Kontakt listu se pak přiřadí následovně:

contactListView.ListViewItemSorter = new ISIMcontactComparer();

 

  Aktivity (1)

Článek pro vás napsal David Jančík [sczdavos]
Avatar
Autor je vášnivý programátor v .NET C# a PHP. Nezná slovo "nelze", nebojí se zkoušet nepoznané a pronikat do nových technologií.

Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!


 



 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!