gpt4 book ai didi

c# - 在 c# 接口(interface)中设置属性中的实现细节

转载 作者:行者123 更新时间:2023-12-04 10:35:49 25 4
gpt4 key购买 nike

我是 C# 的新手。我已经浏览了接口(interface)并知道接口(interface)内部只允许使用属性和方法,因为它们不应该包含任何实现细节。我还知道,即使在 c# 中允许使用属性,它们也不会生成支持字段,不像在类。困扰我的是 c# 编译器允许我编写这个接口(interface):

  interface IPrinter {
int printCount {
get {
return printCount;
}
set {
Console.WriteLine("Your text:");
}
}
}

我什至可以执行它。有人可以纠正我对为什么 c# 不限制我在接口(interface)中的实现的理解吗?

最佳答案

您引用了 C#8 中的一个特性:default-implementaion of interfaces ,现在只是一个草稿。使用此功能,您可以在接口(interface)本身内实现,而无需实际创建具体类。不过,根据我的理解,这归结为类似于具有接口(interface)名称的抽象基类。

截至此功能的规范:

Interfaces may not contain instance state. While static fields are now permitted, instance fields are not permitted in interfaces.



在您的情况下,您没有任何 状态 . printCount房产 ,而不是 字段 .特别是您的属性(property)没有任何支持字段,它所做的只是调用 static方法(以及在运行时导致 StackOverlowException 的 getter 中的无限递归,顺便说一句。)。

因此,除非您不将某种状态引入接口(interface) - 根据规范,这是通过引用 实例字段 - 你可以在默认实现中做任何你想做的事情。

关于c# - 在 c# 接口(interface)中设置属性中的实现细节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60188042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com