Question

j'ai deux classes qui ont des méthodes communes comme funcA (), funcB ()

et certaines méthodes ne concernent que sa classe ...

ce que j'ai fait est fait l'interface 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();
}

comme vous voyez dans les deux classes ci-dessus. J'ai deux fonctions myFuncA () et myFuncB () ne font pas partie de l'interface. ils n'appartiennent qu'à leur propre classe.

comment puis-je les appeler à partir de la méthode principale. où je crée un objet de TestInterface et l’initialise avec une classe enfant. ???

en fait, j'ai des classes séparées dans DAL.

ils ont des méthodes communes. et certaines méthodes liées à leur propre classe.

Je veux implémenter Factory Pattern à ce sujet.

Que dois-je faire maintenant?

Était-ce utile?

La solution 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
}
}

et inversement en classe B

Autres conseils

Si vous demandez si vous pouvez faire quelque chose comme:

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

la réponse est non. Vous devez d'abord le classer dans ClassA. Le fait que vous pensiez avoir besoin de le faire indique qu’il ya probablement un problème avec votre conception.

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

J'espère que c'est ce que vous recherchiez.

Créez une nouvelle interface pour ClassA et ClassB et il vous suffit de convertir la classe en interface correcte pour afficher les nouvelles fonctions.

public class ClassA : TestInterface, TestInterfaceA {
}

Ainsi, lorsque vous obtenez l'occurrence concrète, transmettez-la simplement à TestInterfaceA pour afficher les fonctions spécifiques à cette classe.

Vous pouvez convertir l'objet TestInterface, mais cela va à l'encontre de l'objectif du polymorphisme ...

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

Essayez le casting. Je suppose que d'après la question, vous vouliez dire quelque chose comme ceci:

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

Mohsen, je suis vraiment confus avec votre question

si vous voulez simplement appeler MyFuncA () ou MyFuncB (), vous devez simplement créer une instance de leurs propres cals comme

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

Je ne peux pas comprendre pourquoi vous essayez de créer une instance de votre interface et ensuite appeler des méthodes de sous-classe !!!! Ai-je raison ? ou je ne comprends pas votre problème?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top