DanBlog

Il blog di Daniele Armanasco
posts - 48, comments - 73, trackbacks - 10

Interfacce

Sono comode per simulare l'ereditarietà multipla.

Esempio: il padre di un container può essere di tipo Grid o item; per poter castare il parent del container a qualcosa e richiamare un metodo uguale su grid e item, ho dovuto definire una interfaccia generica che prevede il metodo, specificare che grid e item la implementano, castare il parent all'interfaccia e richiamare il metodo.

public interface IGenericElement
    {
        GenericGrid Grid();
        IGenericElement Father();
    }


public partial class GenericGrid : System.Web.UI.UserControl, IGenericElement
    {
        ...

        public GenericGrid Grid()
        {
            return this;
        }

        public IGenericElement Father()
        {
            return this;
        }
 ...
    }


    public partial class GenericContainer : System.Web.UI.UserControl, IGenericElement
    {
 ...
        public GenericGrid Grid()
        {
            return ((IGenericElement) Parent).Grid();
        }

        public IGenericElement Father()
        {
            // container father could be a grid or an item
            return (IGenericElement) Parent;
        }
espongo una proprietà della griglia attraverso il container:
        public Boolean IsInList
        {
            get { return Grid().IsList ; }
        }
    }

public abstract partial class GenericItemBase : System.Web.UI.UserControl, IGenericElement
    {
 ...
        public GenericGrid Grid()
        {
            return ((IGenericElement) Parent).Grid();
        }
        public IGenericElement Father()
        {
            // item father is always a container
            return (IGenericElement)Parent;
        }
espongo una property della grid attraverso l'item:
        public Boolean IsInList
        {
            get { return Grid().IsList; }
        }
espongo una property del container padre (item contenuti solo in container) attraverso l'item:
        public Boolean IsInNestedContainer
        {
            get { return ((GenericContainer) Father()).NestChildren; }
        }

NOTA: l'interfaccia specifica metodi, non property.

Print | posted on mercoledì 12 settembre 2007 05:54 | Filed Under [ Scoperte di un principiante ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET