none
Implementar clase base pero no exponer funcionalidad en instancia RRS feed

  • Pregunta

  • Hola:

     Tengo la siguiente clase base:

    public abstract class MyBaseClass
    {
        protected abstract void DisplayCore(LocatorBy locatorB, string identifier, string className);
    
        public void Display(LocatorBy locatorB, string identifier, string className)
        {
            if (Shared.IsVisible(locatorB, identifier, 5))
            {
                Context.JavaScriptExecutor.ExecuteScript(Shared.GetAddClassScript(locatorB, identifier, className));
            }
        }
    }

    La cual implemento en una clase como la siguiente:

    public class MyClass : MyBaseClass
    {
        protected override void ClickCore(LocatorBy locatorB, string identifier)
        {
            Click(locatorB, identifier);
        }       
    }

     Esta clase esta declarada como propiedad de otra clase:

    public class MyParenClass
    {
    	public MyParenClass()
    	{
    		MyClass = new MyClass();
    	}
    	public property MyClass MyClass {get; set;}
    }

     Ahora lo que quiero es que desde la implementación de MyParentClass pueda acceder al método Display() de MyClass pero sin la necesidad de pasarle parámetros, osea que de alguna manera dentro de MyClass sobreescribir le método Display() y ahí mismo proporcionar los parámetros, actualmente hago:

    var myParent = new MyParenClass();
     myParent.MyClass.Display(LocatorBy.Id, "xxx", "ccc");

     Pero quiero llegar a hacer algo como esto:

    var myParent = new MyParenClass();
     myParent.MyClass.Display();

    Imagino que en MyClass debería de tener algo a si:

    public class MyClass : MyBaseClass
    {
       private protected override void DisplayCore(LocatorBy locatorB, string identifier, string className)
        {
            Display(locatorB, identifier);
        }       
    
    public void Display()
    {
    DisplayCore(LocatorBy.SomeValue, ""xxxx", "cccc");
    }
    }
     ¿Alguna idea de como lograr esto que quiero?


    Saludos desde Monterrey, Nuevo León, México!!!


    jueves, 1 de febrero de 2018 6:02

Respuestas

  • Lo que pides es muy senzillo:

    public class MyParenClass { public MyParenClass() { MyClass = new MyClass(); } public property MyClass MyClass {get; set;}

    public void Display()

    {

    DisplayCore(LocatorBy.SomeValue, ""xxxx", "cccc");

    }

    }

    Y pordras hacer MyPArentClass.Display()

    También puedes hacerlo en MyClass

    public class MyClass : MyBaseClass { protected override void ClickCore(LocatorBy locatorB, string identifier) { Click(locatorB, identifier); }

    public void Display()

    { DisplayCore(LocatorBy.SomeValue, ""xxxx", "cccc");}

    }

    e invocar asi:

    MyParentClass.MyClass.Display();



    • Marcado como respuesta JoséLuisGarcía jueves, 1 de febrero de 2018 14:49
    • Editado vyrcyrus_ jueves, 1 de febrero de 2018 17:29
    jueves, 1 de febrero de 2018 11:46

Todas las respuestas

  • Lo que pides es muy senzillo:

    public class MyParenClass { public MyParenClass() { MyClass = new MyClass(); } public property MyClass MyClass {get; set;}

    public void Display()

    {

    DisplayCore(LocatorBy.SomeValue, ""xxxx", "cccc");

    }

    }

    Y pordras hacer MyPArentClass.Display()

    También puedes hacerlo en MyClass

    public class MyClass : MyBaseClass { protected override void ClickCore(LocatorBy locatorB, string identifier) { Click(locatorB, identifier); }

    public void Display()

    { DisplayCore(LocatorBy.SomeValue, ""xxxx", "cccc");}

    }

    e invocar asi:

    MyParentClass.MyClass.Display();



    • Marcado como respuesta JoséLuisGarcía jueves, 1 de febrero de 2018 14:49
    • Editado vyrcyrus_ jueves, 1 de febrero de 2018 17:29
    jueves, 1 de febrero de 2018 11:46
  • Hola:

     Gracias!


    Saludos desde Monterrey, Nuevo León, México!!!

    jueves, 1 de febrero de 2018 14:49