CSharp · Console
using System;
using System.Collections.Generic;
public class BaseEntity { }
public class ChildAEntity : BaseEntity { }
public class GrandChildAEntity : ChildAEntity { }
public class ChildBEntity : BaseEntity { }
public interface IEntityPolicy<out T>
{
string GetPolicyResult(BaseEntity entity);
}
public class BaseEntityPolicy : IEntityPolicy<BaseEntity>
{
public BaseEntityPolicy() {}
public string GetPolicyResult(BaseEntity entity) { return nameof(BaseEntityPolicy); }
}
public class GrandChildAEntityPolicy : IEntityPolicy<GrandChildAEntity>
{
public string GetPolicyResult(BaseEntity entity) { return nameof(GrandChildAEntityPolicy); }
}
public class ChildBEntityPolicy: IEntityPolicy<ChildBEntity>
{
public string GetPolicyResult(BaseEntity entity) { return nameof(ChildBEntityPolicy); }
}
public class Program
{
public static void Main()
{
var policies = new List<IEntityPolicy<BaseEntity>>();
policies.Add(new BaseEntityPolicy());
policies.Add(new GrandChildAEntityPolicy());
}
}