如何在两个接口之间创建公共方法

本文关键字:之间 接口 创建 方法 两个 | 更新日期: 2023-09-27 18:17:00

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() ?我有两个接口有相同的方法实现不同。所以我想了想,似乎我只能用静态方法在课堂程序中让每个人都开心。有什么建议或更好的解决方案吗?

如何在两个接口之间创建公共方法

可以使用基本类型:

interface IA {}
interface IB {}
class Base
{
    protected void MyMethod() {}
}
class A : Base, IA {}
class B : Base, IB {}

或静态方法(可能是静态类的):

static class MyHelper()
{
    public static void MyMethod() {}
}

或创建某种服务,并将此服务用作依赖项(此处可以考虑使用依赖注入):

interface IMyService
{
    void MyMethod();
}
class MyService : IMyService
{
    public void MyMethod() {}
}
class A : Base, IA 
{
    private readonly IMyService service;
    public A(IMyService service)
    {
        this.service = service;
    }
    // IA implementation
}
class B : Base, IB 
{
    private readonly IMyService service;
    public B(IMyService service)
    {
        this.service = service;
    }
    // IB implementation
}

我理解正确吗?在F1中,你想调用一个名为MyMethod()的方法,在d2中。如果您还想调用名为MyMethod()的相同方法。

你没有指定MyMethod()属于哪个类,但显然它是d1和d2都可以调用的东西。此外,它们调用相同的MyMethod。我猜你应该把MyMethod放在d1和d2的共同超类中,在你的情况下就是b1。

你可以说:"每个b1都有相同的MyMethod()?"那么它肯定属于b1

考虑Shape类和像rectangle, oval这样的子类以及像square和circle这样的子类。

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

然而,尽管每个形状都有一个面积,但计算矩形面积的方法与计算圆形面积的方法非常不同。GetArea()是一个典型的函数,它可以放在接口中,也可以作为Shape的抽象函数。

添加另一个接口作为这两个接口的基接口

interface IMyMethodable
{
    void MyMethod(); 
}
interface I1 : IMyMethodable
{
    void F1();
}
interface I2 : IMyMethodable
{
    void F2();
} //2 interfaces

如果你想访问程序类的MyMethod,你可以做两件事:

1)声明为Static

2)将其作为委托传递并在类中调用

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