是否有可能将接口的继承限制为多个类? 就像只有Type UserControl的类可以从我的IUserControlStyle接口继承一样。我希望通过它来执行项目约定。
我知道可以限制泛型类型,但如果可以在“普通”接口上应用相同类型,我就不会这样做
答案 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属性的这些类,并负责实现。 这样您就可以控制哪些类可以实现您的界面。