Итак, у меня есть два интерфейса:
public interface ISomething
{
public int A();
}
public interface ISomethingElse
{
public int B();
}
И объект, который реализует оба:
public class MyObject : ISomething, ISomethingElse
{
}
Теперь у меня есть этот рабочий код:
...
List<MyObject> objects = myObjectManager.SelectAll(); // now have say 10 MyObject
MyUtilityClass myUtilityClass = new MyUtilityClass();
MyOtherUtilityClass myOtherUtilityClass = new MyOtherUtilityClass();
myUtilityClass.MySpecialMethod(objects); // <- compile failure
myOtherUtilityClass.MySpecialMethod(objects); // <- another failure
...
Если я хочу вызвать A или B на всех из них, как я могу написать код, подобный этому:
public class MyUtilityClass
{
public void MySpecialMethod(List<ISomething> objects) // <- the problem
{
foreach (ISomething o in objects)
o.A();
}
}
public class MyOtherUtilityClass
{
public void MySpecialMethod(List<ISomethingElse> objects) // <- the problem
{
foreach (ISomethingElse o in objects)
o.B();
}
}
Как я могу чисто позвонить MyUtilityClass.MySpecialMethod()
на моем List<MyObject> objects
?Возможно ли это без всех типов?Параметры MyUtilityClass.MySpecialMethod()
, по-видимому, являются проблемой (я хочу определить параметр как список объектов, которые реализуют ISomething).