using System; using System.Runtime.Serialization; namespace ZeroLevel.Specification { [Serializable] [DataContract] public abstract class BaseSpecification<T> : ISpecification<T> { public abstract bool IsSatisfiedBy(T o); public ISpecification<T> And(ISpecification<T> specification) { return new AndSpecification<T>(this, specification); } public ISpecification<T> Or(ISpecification<T> specification) { return new OrSpecification<T>(this, specification); } public ISpecification<T> Not() { return new NotSpecification<T>(this); } } }