Domanda

Ho due classi che hanno alcuni metodi comuni come funcA (), funcB ()

e alcuni metodi sono legati solo alla sua classe ...

quello che ho fatto è stato reso l'interfaccia di 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();
}

come vedi nelle due classi precedenti. ho due funzioni myFuncA () e myFuncB () non fanno parte dell'interfaccia. appartengono solo alla propria classe.

come posso chiamarli dal metodo principale. dove sto creando l'oggetto di TestInterface e inizializzandolo con qualche classe figlio. ???


in realtà ho classi separate in DAL.

hanno alcuni metodi comuni. e alcuni metodi relativi alla propria classe.

Voglio implementare Factory Pattern su questo.

cosa devo fare ora?

È stato utile?

Soluzione 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
}
}

e viceversa nella classe B

Altri suggerimenti

Se ti stai chiedendo se puoi fare qualcosa del genere:

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

la risposta è no. Dovresti prima inviarlo a ClassA. Il fatto che pensi di doverlo fare indica che probabilmente c'è qualcosa di sbagliato nel tuo design.

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

Spero che questo fosse quello che stavi cercando.

Crea una nuova interfaccia per ClassA e ClassB e devi solo trasmettere la classe all'interfaccia corretta per vedere le nuove funzioni.

public class ClassA : TestInterface, TestInterfaceA {
}

Quindi, quando ottieni l'istanza concreta, lanciala su TestInterfaceA per vedere le funzioni specifiche di questa classe.

Puoi lanciare l'oggetto TestInterface, ma sconfigge lo scopo del polimorfismo ...

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

Prova a trasmettere. Presumo dalla domanda che intendevi qualcosa del genere:

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

Mohsen, sono davvero confuso con la tua domanda

se vuoi solo chiamare MyFuncA () o MyFuncB () devi solo creare un'istanza del loro calss come

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

Non riesco a capire perché stai cercando di creare un'istanza della tua interfaccia e quindi chiamare i metodi della sottoclasse !!!! Ho ragione ? o hai capito male il tuo problema?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top