Pregunta

tengo dos clases que tienen algunos métodos comunes como funcA (), funcB ()

y algunos métodos solo están relacionados con su clase ...

lo que hice es una interfaz hecha de TestInterface

public interface TestInterface
{
   void funcA()
   void funcB()
}


public class ClassA : TestInterface
{
  public  void funcA()
   {
     Console.WriteLine("This is ClassA FuncA()");
   }
  public  void funcB()
   {
     Console.WriteLine("This is ClassA FuncB()");
   }
  public void myFuncA()
   {
      Console.WriteLine("This is My Own Function A");
    }

}

public class ClassB : TestInterface
    {
      public  void funcA()
       {
         Console.WriteLine("This is ClassB FuncA()");
       }
      public  void funcB()
       {
         Console.WriteLine("This is ClassB FuncB()");
       }
      public void myFuncB()
       {
          Console.WriteLine("This is My Own Function B");
       }

    }



public static void main()
{
 TestInterface test = new ClassA();
 test.funcA();
}

como se ve en las dos clases anteriores. Tengo dos funciones myFuncA () y myFuncB () no forman parte de la interfaz. solo pertenecen a su propia clase.

¿Cómo puedo llamarlos desde el método principal? donde estoy creando el objeto de TestInterface e inicializándolo con alguna clase secundaria. ???


en realidad tengo clases separadas en DAL.

tienen algunos métodos comunes. y algunos métodos relacionados con su propia clase.

quiero implementar Factory Pattern en esto.

¿Qué debo hacer ahora?

¿Fue útil?

Solución 7

is it good to add methods of ClassA and ClassB into interface and provide null implementation in other class?
like 

public interface TestInterface
{
void funcA();
void funcB();
void myFuncA();
void myFuncB();
}


public class ClassA:TestInterface
{
public void funcA()
{
 // some code here
}

public void funcB()
{
 // some code here
}
public void myFuncA()
{
 // my own code here
}
public void funcB()
{
 // null implementation
}
}

y viceversa de esto en la Clase B

Otros consejos

Si está preguntando si puede hacer algo como:

public static void Main(string[] a)
{
 TestInterface test = new ClassA();
 test.myFuncA();
}

la respuesta es no. Tendría que lanzarlo a la Clase A primero. El hecho de que creas que necesitas hacer esto indica que probablemente hay algo mal con tu diseño.

TestInterface test = new ClassA();
 test.myFuncA();
(test as ClassB).myFuncB();

Espero que esto sea lo que estabas buscando.

Cree una nueva interfaz para ClassA y ClassB y solo necesita convertir la clase en la interfaz correcta para ver las nuevas funciones.

public class ClassA : TestInterface, TestInterfaceA {
}

Entonces, cuando tengas la instancia concreta, simplemente envíalo a TestInterfaceA para ver las funciones específicas de esta clase.

Puede lanzar el objeto TestInterface, pero anula el propósito del polimorfismo ...

public static void main()
{
 TestInterface test = new ClassA();
 test.funcA();
((ClassA) test).myFuncA();
}

Prueba el casting. Asumo por la pregunta que quisiste decir algo como esto:

public void simpleMethod(TestInterface variableName) {
   if (variableName is ClassA) {
       ((ClassA)variableName).myFuncA();
    }
}

Mohsen, estoy realmente confundido con tu pregunta

si solo quieres llamar a MyFuncA () o MyFuncB () solo debes crear una instancia de sus propios calss como

ClassA a = new ClassA();
a.FuncA(); //interface member
a.FuncB(); // interface member
a.MyFuncA(); //class A Member

¡No puedo entender por qué estás tratando de crear una instancia de tu interfaz y luego llamar a los métodos de subclase! Estoy en lo cierto? o entendí tu problema?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top