Вопрос

у меня есть два класса, которые имеют некоторые общие методы, такие как funcA (), funcB ()

и некоторые методы связаны только с его классом ...

я сделал интерфейс 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();
}

как вы видите в двух предыдущих классах. У меня есть две функции myFuncA () и myFuncB () не являются частью интерфейса. они принадлежат только своему классу.

как я могу вызвать их из основного метода. где я создаю объект TestInterface и инициализирую его с некоторым дочерним классом. ???

<Ч>

На самом деле у меня есть отдельные классы в DAL.

у них есть несколько общих методов. и некоторые методы, связанные с их собственным классом.

Я хочу реализовать Factory Pattern на этом.

что мне теперь делать?

Это было полезно?

Решение 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
}
}

и наоборот в классе B

Другие советы

Если вы спрашиваете, можете ли вы сделать что-то вроде:

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

ответ - нет. Вы должны были бы бросить это в ClassA сначала. Тот факт, что вы думаете, что вам нужно сделать это, указывает на то, что, возможно, что-то не так с вашим дизайном.

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

Надеюсь, это было то, что вы искали.

Создайте новый интерфейс для ClassA и ClassB, и вам просто нужно привести класс к правильному интерфейсу, чтобы увидеть новые функции.

public class ClassA : TestInterface, TestInterfaceA {
}

Итак, когда вы получите конкретный экземпляр, просто приведите его к TestInterfaceA, чтобы увидеть функции, специфичные для этого класса.

Вы можете привести объект TestInterface, но он отрицает цель полиморфизма ...

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

Попробуйте кастинг. Я предполагаю из вопроса, что вы имели в виду что-то вроде этого:

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

Мохсен, я действительно запутался в твоем вопросе

если вы просто хотите вызвать MyFuncA () или MyFuncB (), вам просто нужно создать экземпляр их собственного запроса, например

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

Я не могу понять, почему вы пытаетесь создать экземпляр вашего интерфейса, а затем вызывать методы подкласса !!!! Я прав ? или не понял вашу проблему?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top