如何在两个接口之间创建公共方法
本文关键字:之间 接口 创建 方法 两个 | 更新日期: 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
应该是某个新类型的静态方法,该方法表示执行此类操作的责任。