接口是否可以具有模板化的方法名称
本文关键字:方法 是否 接口 | 更新日期: 2023-09-27 18:30:07
我知道答案可能是否定的,但我仍然想确认
接口可以有可变方法名吗?类似的东西
Interface IVariableMethodName //something similar to <T>
{
void T(int param);
void T(string param);
}
我有一些类,对于参数完全相同但名称不同、功能不同的函数,它们需要函数重载。有没有更好的方法可以做到这一点,而不是制作除了方法名称之外内容几乎相同的集群接口?
编辑:示例
class Adder
{
public int Add(int a, int b){}
public float Add(float a, float b){}
public decimal Add(decimal a, decimal b){}
}
class Subber
{
public int Sub(int a, int b){}
public float Sub(float a, float b){}
public decimal Sub(decimal a, decimal b){}
}
我试图做的与示例类似,唯一的区别是返回类型是类本身。而且这些方法具有非常不同的功能。
我仍然不确定我是否完全理解这个问题。但是,可以肯定的是,不可能定义一个接口,其中接口成员可以根据实现类采用不同的名称。
考虑到根本目标是维护;也就是说,如果某个类未能实现所有必要的方法,则确保出现编译时错误—在我看来,最接近的方法是用通用方法名称声明一个接口,然后让每个特定类型通过委托给特定类型的方法来实现该接口。
例如:
interface IOperator
{
int Operation(int a, int b);
float Operation(float a, float b);
decimal Operation(decimal a, decimal b);
}
class Adder : IOperator
{
public int Add(int a, int b){}
public float Add(float a, float b){}
public decimal Add(decimal a, decimal b){}
public int Operation(int a, int b) { return Add(a, b); }
public float Operation(float a, float b) { return Add(a, b); }
public decimal Operation(decimal a, decimal b) { return Add(a, b); }
}
class Subber : IOperator
{
public int Sub(int a, int b){}
public float Sub(float a, float b){}
public decimal Sub(decimal a, decimal b){}
public int Operation(int a, int b) { return Sub(a, b); }
public float Operation(float a, float b) { return Sub(a, b); }
public decimal Operation(decimal a, decimal b) { return Sub(a, b); }
}
不幸的是,这实际上并不能保证每个类型都实现了所讨论的特定于类型的方法。但它确实要求每个类型都实现接口,如果您的团队中有开发人员,他们会通过某种方式在接口中实现一个新方法,而不是将相应的特定于类型的方法添加到类中,然后调用它,那么您将面临更大的问题。:)
对我来说,不幸的是,这个接口实际上可能没有像接口那样使用:即支持某些特定合同的多态实现。但也许你会发现,一旦你有了这样的东西,继续推广其他代码是有意义的。
就这一点而言,如果你做到了这一点,也许你会发现,停止在每个类型中使用不同方法名编写这些类型更有意义,因为在不同的类型中,方法实际上是基本相同的。:)