Pergunta

eu tenho duas classes que tem alguns métodos comuns como funcA(), funcB()

e alguns métodos são apenas relacionadas com a sua classe...

o que eu fiz é feita a 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();
}

como u ver acima em duas classes.eu tenho duas funções myFuncA() e myFuncB() não são parte da interface.eles só pertence à sua própria classe.

como posso chamá-los a partir do método main.onde estou criando objeto de TestInterface e inicializar com alguma criança da classe.???


na verdade eu classes separadas em DAL.

eles têm alguns métodos comuns.e alguns métodos relacionados à sua própria classe.

eu quero implementar o Padrão de Fábrica neste.

o que devo fazer agora?

Foi útil?

Solução 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 vice-versa deste em ClassB

Outras dicas

Se você está perguntando se você pode fazer algo como:

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

a resposta é não. Você teria que lançá-lo aos ClassA em primeiro lugar. O fato de que você acha que precisa de fazer isso indica provavelmente há algo errado com o seu design.

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

Esperamos que isso era o que você estava procurando.

Faça uma nova interface para ClassA e ClassB e você só precisa lançar a classe para a interface correta para ver as novas funções.

public class ClassA : TestInterface, TestInterfaceA {
}

Então, quando você começa a instância concreta apenas lançar isso para TestInterfaceA para ver a funções específicas a esta classe.

Você pode converter o objeto TestInterface, mas derrota o propósito de polimorfismo ...

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

Tente lançando. Eu assumo a partir da pergunta que você quis dizer algo como isto:

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

Mohsen Estou muito confuso com sua pergunta

Se você só quer chamar MyFuncA () ou MyFuncB () só você deve criar uma instância de sua própria calss como

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

Não consigo undrestand por que você está tentando criar uma instância de sua interface e, em seguida, chamar métodos de subclasse !!!! Estou certo ? ou Imisunderstood seu problema?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top