限制接口的继承

时间:2015-05-17 17:35:55

标签: c# interface

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

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

2 个答案:

答案 0 :(得分:0)

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

            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");
            }

这不是一个好的,而是一个有效的解决方案。它很难看,因为你在运行应用程序后得到了Exception,而在你编写代码时却没有。如果有人知道更好的解决方案,请告诉我。

答案 1 :(得分:-1)

你不能限制接口继承或实现。但是你可以随时使用属性。 例如,您可以创建一个ImplementsInterfaceA类类型属性,并将其用于将要实现的类,或者以某种形式与给定接口相关。

然后,通过反射,您只能获得具有ImplementsInterfaceA属性的这些类,并负责实现。 这样您就可以控制哪些类可以实现您的界面。