문제

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에 별도의 수업이 있습니다.

그들은 몇 가지 일반적인 방법이 있습니다. 그리고 자신의 수업과 관련된 몇 가지 방법.

이것에 대한 공장 패턴을 구현하고 싶습니다.

지금 무엇을해야합니까?

도움이 되었습니까?

해결책 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
}
}

그리고 classb에서 이것의 Vise Vera

다른 팁

다음과 같은 일을 할 수 있는지 묻는 경우 :

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();
    }
}

Mohsen 나는 당신의 질문과 정말로 혼란 스럽습니다

myfunca () 또는 myfuncb ()를 호출하려면 자신의 calss와 같은 인스턴스를 만들어야합니다.

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

인터페이스의 인스턴스를 만들고 서브 클래스 메소드를 호출하려는 이유를 설명 할 수 없습니다 !!!! 내가 맞아? 아니면 문제를 이해 했습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top