2009-05-05 7 views
0

j'ai deux classes qui ont des méthodes communes comme FoncA(), FoncB()Problème dans Interfaces (polymorphisme) C#

et certaines méthodes ne sont liées à sa classe ...

ce que je fait est fait 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 le voyez ci-dessus deux classes. J'ai deux fonctions myFuncA() et myFuncB() ne font pas partie de l'interface. ils appartiennent seulement à leur propre classe.

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


effectivement j'ai des classes séparées dans DAL.

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

Je veux implémenter le modèle d'usine sur ceci.

que dois-je faire maintenant?

Répondre

-1
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 versa étau cela dans ClassB

+0

C'est le modèle d'objet nul. Mais vous devriez sérieusement envisager si cela est nécessaire non plus. –

2

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 devriez d'abord le lancer en ClassA. Le fait que vous pensiez que vous devez faire cela indique qu'il y a probablement quelque chose qui ne va pas dans votre conception.

0

Créez une nouvelle interface pour ClassA et ClassB et vous avez juste besoin de convertir la classe à l'interface correcte pour voir les nouvelles fonctions.

public class ClassA : TestInterface, TestInterfaceA { 
} 

Alors, quand vous obtenez l'instance de béton qui vient jeter à TestInterfaceA pour voir les fonctions spécifiques à cette classe.

0

Vous pouvez lancer l'objet TestInterface, mais il défait le but du polymorphisme ...

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

casting essai. Je suppose que de la question que vous vouliez dire quelque chose comme ceci:

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

Mohsen Je suis vraiment confus avec votre question

si vous voulez juste appeler MyFuncA() ou MyFuncB() juste vous devez créer une instance de leur propre calss comme

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

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

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

Espérons que c'était ce que vous cherchiez.