理解为什么静态方法不实现 C# 中的接口
C# 禁止静态方法实现接口。 这种限制植根于接口的核心概念:为类.
定义行为契约接口指定类必须执行的操作。 然而,静态方法在类型级别运行,而不是在特定的类实例上运行。 因此,允许静态方法接口实现将与面向对象编程原则相矛盾。
说明性示例:
<code class="language-csharp">public interface IListItem { string ScreenName(); } public class Animal : IListItem { // Incorrect: Static method violates the interface contract public static string ScreenName() { return "Animal"; } // ... other members ... }</code>
理想情况下,ScreenName
方法应返回特定 IListItem
实例的显示名称。 Animal
的静态实现是有缺陷的,因为它为 每个 动物返回“动物”,忽略了个体特征。
推荐的解决方案:
<code class="language-csharp">public class Animal : IListItem { public const string AnimalScreenName = "Animal"; public string ScreenName() { return AnimalScreenName; } }</code>
这种修改后的方法使用常量属性来保存静态名称。然后 ScreenName
方法访问该常量,根据接口的要求维护基于实例的行为。 这确保了接口契约得到正确履行。
以上是为什么静态方法不能在 C# 中实现接口?的详细内容。更多信息请关注PHP中文网其他相关文章!