Content deleted Content added
No edit summary |
Moved code to C# 5 to be more concise, actually there is no simplification - just making things generic, no extensions either |
||
Line 134:
</source>
=== [[C Sharp (programming language)|C#
<source lang="csharp">
public interface ISpecification<T>
{
bool IsSatisfiedBy(T
ISpecification<T> And(ISpecification<T> other);
ISpecification<T> AndNot(ISpecification<T> other);
Line 150:
{
public abstract Expression<Func<T, bool>> AsExpression();
public override bool IsSatisfiedBy(T candidate) => AsExpression().Compile()(candidate);▼
}
public abstract class CompositeSpecification<T> : ISpecification<T>
{
public abstract bool IsSatisfiedBy(T
public ISpecification<T>
public ISpecification<T> OrNot(ISpecification<T> other)
▲ public ISpecification<T> Or(ISpecification<T> other)
▲ public ISpecification<T> OrNot(ISpecification<T> other)
▲ return new NotSpecification<T>(this);
}
public class AndSpecification<T> : CompositeSpecification<T>
{
public AndSpecification(ISpecification<T> left, ISpecification<T> right)
Line 200 ⟶ 174:
}
public override bool IsSatisfiedBy(T candidate) => left.IsSatisfiedBy(candidate) && right.IsSatisfiedBy(candidate);
}
public class AndNotSpecification<T> : CompositeSpecification<T>
{
public AndNotSpecification(ISpecification<T> left, ISpecification<T> right)
Line 217 ⟶ 188:
}
public override bool IsSatisfiedBy(T candidate) => left.IsSatisfiedBy(candidate) && right.IsSatisfiedBy(candidate) != true;
}
public class OrSpecification<T> : CompositeSpecification<T>
{
public OrSpecification(ISpecification<T> left, ISpecification<T> right)
Line 234 ⟶ 202:
}
public override bool IsSatisfiedBy(T candidate) => left.IsSatisfiedBy(candidate) || right.IsSatisfiedBy(candidate);
}
public class OrNotSpecification<T> : CompositeSpecification<T>
{
public OrNotSpecification(ISpecification<T> left, ISpecification<T> right)
Line 250 ⟶ 215:
}
public override bool IsSatisfiedBy(T candidate) => left.IsSatisfiedBy(candidate) || right.IsSatisfiedBy(candidate) != true;
}
public class NotSpecification<T> : CompositeSpecification<T>
{
public
▲ public override bool IsSatisfiedBy(T candidate)
}
</source>
|