c# - 在 C# 中强制实现没有接口(interface)或抽象类的方法

标签 c# wpf class xaml

我正在创建一个模块化类型系统,一个应用程序(主机)将其他模块加载到通用 UI 界面中,我还为此创建了一个 API,可供其他用户使用。

在某些情况下,API 使用接口(interface)和抽象类来强制使用 API 的客户端实现特定方法。

我不能对所有事情都使用接口(interface),因为有些东西我需要放入自己的 body 中,因此最终用户不需要自己实现所有不必要的事件和方法。 EG:所以我自己处理大小更改事件,然后将大小传递给他实现的名为 SizeChanged 的​​函数,这样他就可以通过大小更改来处理他的程序。

抽象类是我真正想要使用的,但我不能,因为用户拥有的控件可能需要 XAML 中指定的 x:Name 并且会收到错误:

The type ... cannot have a Name attribute. Values types and types without a default constructor can be used as items within ResourceDictionary.

发生错误是因为需要创建它的实例: Inherited Window can not have a name?

据我所知,唯一可用的解决方案是使用带有可以重写的虚拟方法的常规类,并且确实工作正常,但它不会强制用户实现所需的方法。

有什么我可以干净利落地做的事情,比如任何公共(public)可实现的东西吗?

这是结构:

API: IContext -> ContextControl -> (抽象方法)

模块DLL ContextControl(API) -> AppContextControl(重写方法)

主机应用程序拉取AppContextControl

我知道我可以告诉模块开发人员实现一个接口(interface)以及约束他们实现接口(interface)的 ContextControl,但编译器告诉他们会更专业。

在开发模块中,如果我不是从 ContextControl 继承,而是实现 IContext,那么我会丢失所有默认主体,并且模块开发必须实现更多内容。

干杯。

最佳答案

您所描述的两种方法 - 接口(interface)和抽象类 - 是(我确信您知道)执行您所描述的操作的推荐方法,至少,如果您想在编译时强制实现的话 -时间。

我知道的唯一其他方法是提供一个抛出 NotImplementedException() 的默认实现。不幸的是,这会给你一个运行时错误,但在编译时不会出现任何错误。

关于c# - 在 C# 中强制实现没有接口(interface)或抽象类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23620446/

相关文章:

c# - 如何根据条件更改 DataGridView 列值

c# - 创建用户向导 - 用户代码未处理空引用异常

c# - Where 子句之前的 OrderBy 子句 - 性能?

c# - 文本框转换发送 key : Alt + Enter -> Enter

Python子类在构造函数中使用父变量

c# - 匿名对象的 Entity Framework ObjectMaterialized

wpf - 如何使用 MVVM 获取多个选中的数据网格复选框项目

c# - 嵌套控件结构 - 使用 XAML 还是 C#?

python - 在运行时重置/重新加载嵌套类的类属性

C++ 在静态函数中访问私有(private)静态变量