假设我们有一个接口IInterface
和几个实现此接口的类Class1
,...,ClassN
。
我需要一个方法CheckSomething
用于该接口的所有实现者。一种方法是使CheckSomething
成为IInterface
的方法,并为所有类实现它:
interface IInterface { bool CheckSomething(string arg); }
class Class1 : IInterface { public bool CheckSomething(string arg) { ... } }
...
class ClassN : IInterface { public bool CheckSomething(string arg) { ... } }
可能有理由将CheckSomething
方法保留在类的代码之外(例如,我们无法修改类的代码;例如,方法CheckSomething
不属于类语义-wise)。
为了仍然获得相同的行为,我们可以使用扩展方法:
static class MyExtensionMethods
{
public static CheckSomething(this Class1 c, string arg) { ... }
...
public static CheckSomething(this ClassN c, string arg) { ... }
public static CheckSomething(this IInterface i, string arg) // option 1
{
dynamic dynI = i;
return i.CheckSomething(arg);
}
}
关于dynamic
,每个人都警告它会给予性能惩罚,所以......
答案 0 :(得分:0)
由于您似乎已经引用了类的实现,因此您可能会选择一个或多或少丑陋的切换案例。我不知道性能。
public static class MyExtensionMethods
{
public static CheckSomething(this IInterface i, string arg) // option 1
{
switch (i)
{
case i is Class1 class1:
// class specific implementation (maybe in a separate method)
...
}
}
}