如何在两个接口

时间:2015-10-09 13:35:18

标签: c# interface abstraction

class Program
{
    interface I1
    {
        void F1();
    }

    interface I2
    {
        void F2();
    } //2 interfaces

    abstract class b1 : I1
    {
        abstract public void F1();
    }

    private class d1 : b1
    {
        public override void F1()
        {
            Console.Write("Inside D1:b1.F1");

            //I want to call my method() here
            MyMethod();
        }
    }

    private class d2 : b1
    {
        public override void F1()
        {
            Console.Write("Inside d2:b1.F1");

            //I want to call my method() here
            MyMethod();
        }
    }

   private class ImeplementI2_1 : I2
    {
        public void F2()
        {
            //Implementation
            Console.Write("Inside b_1:b_1.F2");

            //I want to call my method() here
            MyMethod();
        }
    }

   private class ImeplementI2_2 : I2
   {
       public void F2()
       {
           //Implementation
           Console.Write("Inside b_1:b_1.F2");

           //I want to call my method() here
           MyMethod();
       }
   }

    void MyMethod()
    {
        Console.WriteLine("Printmenow");
    }

    static void Main(string[] args)
    {
        I1 interface1;

        if (args.Length > 0)
        {
            interface1 = new d1();

        }
        else
        {
            interface1 = new d2();
        }

        interface1.F1();
        //I want to call my method() here
        MyMethod();

    }

}

哪里最好实现MyMethod()?我有2个接口有相同的方法实现不同。所以我想到了它,似乎我只能在该课程中使用静态方法让每个人都开心。任何建议或更好的解决方案

3 个答案:

答案 0 :(得分:0)

添加另一个界面作为这两个

的基础界面
var studentDetails = [];

for (var id in studentIds) {
    var studentDetail = {}; // this will be a single student
    var marks = [];    

    if (studentIds.hasOwnProperty(id)) {
        for (var mark in studentMarks) {
            if (studentMarks.hasOwnProperty(mark) && mark.id === id) {
                studentDetail.id = id;
                marks.push(mark.marks);
            }
        }
        studentDetail.marks = marks;
    }
    studentDetails.push(studentDetail);
}

$scope.studentDetails = studentDetails;

如果您想访问MyMethod of Program类,您可以做两件事:

1)只需将其声明为静态

2)将其作为代表传递并在您的课程中调用

答案 1 :(得分:0)

我是否理解正确的方法d1.F1中你要调用名为MyMethod()的方法,而在d2.F1中你也想要调用名为MyMethod()的相同方法。

您没有指定MyMethod()属于哪个类,但显然它是d1和d2都可以调用的内容。除此之外,他们也称同样的MyMethod。我想你应该将MyMethod放在d1和d2的公共超类中,在你的情况下它们将是b1。

你能说:“每个b1都有相同的MyMethod()吗?那么它肯定属于b1

考虑类Shape和子类,如矩形,椭圆形和子类,如方形和圆形。

如果你说每个Shape都有一个Point我们称之为Shape的位置,那么GetPosition绝对是Shape的函数。

但是,尽管每个Shape都有一个Area,但计算矩形区域的方式与圆的面积非常不同。 GetArea()是一个典型的函数示例,它可以作为接口中的位置,也可以作为Shape的抽象函数。

答案 2 :(得分:-1)

你是非常正确的,如果你有一个特定的方法,你已经写过你想要从任何给定的类访问,并且不需要任何对象实例来存储任何状态那么你想要一个public static方法。在您的示例中,它将工作以使其在Program内,尽管在任何非玩具示例中,我强烈建议您不要将所有这些嵌套在Program类中。所有这些类型都应该是顶级类型,MyMethod应该是某种新类型的静态方法,表示执行此类操作的责任。