一次调用IS操作员即可覆盖所有接口子类型

时间:2018-12-03 21:20:23

标签: c# asp.net .net

我正在努力寻找解决问题的最佳方法。 我有一些接口 ITokenResolver 和一个具体的实现者 ObjectGraph 以及一段ObjectGraph类的代码:

    bool ITokenResolver.HasCollision(ITokenResolver other, out string msg)
    {
        if (!(other is ObjectGraph og))
        {
             msg = null;
             return false;
        }

        var samePaths = GetAllPaths().Intersect(og.GetAllPaths());
        if (samePaths.Count() > 0)
        {
            msg = $"Both graphs contain same object paths: [{string.Join(StringExtensions.Comma, samePaths)}]";
            return true;
        }

        msg = null;
        return false;
    }

让我担心的是,我的库用户可以创建几乎相同的实现者行为( ITokenResolver 的实现者,但不是 Graph 类的实现者)。 我的代码仅适用于我的预定义类型,但是我不知道如何使其更好地适用于所有GRAPH-LIKE解析器。我应该创建一个像 IGraphResolver 这样的新接口,以便将我的实现者更改为public class ObjectGraph: ITokenResolver, IGraphResolver吗?使用新的界面,我可以在不知道具体实现的情况下,而是依靠界面,来覆盖所有特定的解析器。这是对的吗? 我在GitHub上的原始代码:ObjectGraph.cs

0 个答案:

没有答案