Вот альтернативный подход (мы использовали нечто подобное, но не уверены, насколько хорошо оно будет соответствовать вашей реализации linq):
Пусть StadiumBaseClass реализует каждый из интерфейсов с базовой функциональностью, а затем предоставляет виртуальные свойства, которые реализующие классы могут использовать, чтобы: а) указывать, какие интерфейсы он поддерживает, и б) изменять поведение по умолчанию при необходимости.
Например, предполагая следующие интерфейсы:
public interface IBaseball
{
void Whatever();
}
public interface IHockey
{
void Whatever();
}
public interface IFootball
{
void Whatever();
}
public interface IBasketball
{
void Whatever();
}
public interface ISoccer
{
void Whatever();
}
Ваш базовый класс будет выглядеть примерно так:
public class StadiumBaseClass : IBaseball, IBasketball, IHockey, IFootball, ISoccer
{
#region IBaseball Members
public virtual bool IBaseballImplemented
{
get
{
return false;
}
}
void IBaseball.Whatever()
{
// Do something
}
#endregion
#region IBasketball Members
public virtual bool IBasketballImplemented
{
get
{
return false;
}
}
void IBasketball.Whatever()
{
// Do something
}
#endregion
#region IHockey Members
public virtual bool IHockeyImplemented
{
get
{
return false;
}
}
void IHockey.Whatever()
{
// Do something
}
#endregion
#region IFootball Members
public virtual bool IFootballImplemented
{
get
{
return false;
}
}
void IFootball.Whatever()
{
// Do something
}
#endregion
#region ISoccer Members
public virtual bool ISoccerImplemented
{
get
{
return false;
}
}
void ISoccer.Whatever()
{
// Do something
}
#endregion
}
Что бы оставить ваш индивидуальный класс стадиона как:
class YankeeStadium : StadiumBaseClass
{
public override bool IBaseballImplemented
{
get
{
return true;
}
}
public override bool IHockeyImplemented
{
get
{
return true;
}
}
public override bool IFootballImplemented
{
get
{
return true;
}
}
}