首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >限制接口继承

限制接口继承
EN

Stack Overflow用户
提问于 2015-05-18 01:35:55
回答 2查看 77关注 0票数 0

是否有可能将接口的继承限制为多个类?就像只有UserControl类型的类可以从我的IUserControlStyle接口继承一样。我想通过这一点来强制执行项目约定。

我知道可以限制泛型类型,但如果可以在“普通”接口上应用相同的类型,我就不知道了

EN

回答 2

Stack Overflow用户

发布于 2015-05-18 02:33:50

因为似乎没有任何解决方案强制要求只有UserControls实现我的IUserControlDefaultStyle接口,所以我需要在运行时通过Program.cs中的System.Reflection来实现。

代码语言:javascript
复制
            List<Type>l=typeof(IUserControlDefaultStyle).Assembly.GetTypes().Where(x => !x.IsSubclassOf(typeof(UserControl)) &&x.GetInterfaces().Contains(typeof(IUserControlDefaultStyle))).ToList();
            if (l.Count > 0)
            {
                l.ForEach(x=>Console.WriteLine(x.Name+"   is abusing IUserControlDefaultStyle"));
                throw new Exception("IUserControlDefaultStyle was abused");
            }

这不是一个很好的解决方案,但却是一个可行的解决方案。这很难看,因为你在运行应用程序之后就会得到异常,而不是在你编码的时候。如果有人知道更好的解决方案,请让我知道。

票数 0
EN

Stack Overflow用户

发布于 2015-05-18 01:42:58

你不能限制接口继承或实现。但在这种情况下,您始终可以使用属性。例如,您可以创建一个ImplementsInterfaceA类类型属性,并在将要实现或以某种形式与给定接口相关的类上使用它。

在此之后,使用反射,您只能获得这些具有ImplementsInterfaceA属性的类,并负责实现。这样,您就可以控制哪些类可以实现您的接口。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30289920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档