接口问题(多态)C#

时间:2009-05-05 04:50:58

标签: c# interface polymorphism

我有两个类,有一些常见的方法,如 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()不是接口的一部分。他们只属于自己的班级。

我怎么能从main方法中调用它们。我在哪里创建TestInterface的对象并用一些子类初始化它。???


实际上我在DAL中有单独的类。

他们有一些共同的方法。以及与他们自己的班级有关的一些方法。

我想在此实施工厂模式。

我现在该怎么办?

7 个答案:

答案 0 :(得分:2)

如果你问你是否可以这样做:

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

答案是否定的。您必须先将其强制转换为ClassA。您认为需要这样做的事实表明您的设计可能存在问题。

答案 1 :(得分:1)

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

希望这就是你要找的东西。

答案 2 :(得分:0)

为ClassA和ClassB创建一个新接口,您只需要将类转换为正确的接口即可查看新功能。

public class ClassA : TestInterface, TestInterfaceA {
}

因此,当您获得具体实例时,只需将其转换为TestInterfaceA以查看特定于此类的函数。

答案 3 :(得分:0)

你可以强制转换TestInterface对象,但它违背了多态的目的......

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

答案 4 :(得分:0)

尝试投射。我从这个问题中假设你的意思是这样的:

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

答案 5 :(得分:0)

Mohsen我真的很困惑你的问题

如果你只是想调用MyFuncA()或MyFuncB(),你应该创建一个他们自己的calss实例,如

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

我无法解决为什么你试图创建一个接口实例然后调用子类方法!!!! 我对吗 ?或者无理解你的问题?

答案 6 :(得分:-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
}
}

,反之亦然B类