Problema em Interfaces (polimorfismo) C#
-
05-07-2019 - |
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?
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 ??p>
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?