是否有可能将接口的继承限制为多个类?就像只有UserControl类型的类可以从我的IUserControlStyle接口继承一样。我想通过这一点来强制执行项目约定。
我知道可以限制泛型类型,但如果可以在“普通”接口上应用相同的类型,我就不知道了
发布于 2015-05-18 02:33:50
因为似乎没有任何解决方案强制要求只有UserControls实现我的IUserControlDefaultStyle接口,所以我需要在运行时通过Program.cs中的System.Reflection来实现。
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");
}这不是一个很好的解决方案,但却是一个可行的解决方案。这很难看,因为你在运行应用程序之后就会得到异常,而不是在你编码的时候。如果有人知道更好的解决方案,请让我知道。
发布于 2015-05-18 01:42:58
你不能限制接口继承或实现。但在这种情况下,您始终可以使用属性。例如,您可以创建一个ImplementsInterfaceA类类型属性,并在将要实现或以某种形式与给定接口相关的类上使用它。
在此之后,使用反射,您只能获得这些具有ImplementsInterfaceA属性的类,并负责实现。这样,您就可以控制哪些类可以实现您的接口。
https://stackoverflow.com/questions/30289920
复制相似问题