如何解决C# 接口中自动实现的属性
我指的是微软的文档 - https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/auto-implemented-properties 。他们声明自动实现的属性基本上是没有主体的属性,当在 get 或 set 中不需要额外的逻辑时。所以 int Myproperty1 {get;set;}
是一个自动实现的属性。本文档还说明了以下几点
声明 1: “您不能在接口中声明自动实现的属性。自动实现的属性声明一个私有实例支持字段,并且接口可能不声明实例字段。”
但是我可以在接口中声明如下自动实现的属性
public MyInterface { int Myproperty1 {get;set;}
.这与我们不能在接口中声明自动实现的属性的上述声明不冲突吗。
Microsoft 文档然后说: 声明2: “在不定义主体的情况下在接口中声明属性会声明一个带有访问器的属性,每个实现该接口的类型都必须实现这些访问器。”
我不明白什么是声明没有 body 的属性,这不是自动实现的属性,如果是,那么第一条语句不正确吗?
对问题的重要编辑:我很抱歉,我错误地发布了带有此链接的问题: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/interface-properties。 虽然我打算参考以下链接: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/auto-implemented-properties。我现在用正确的链接更新了我的问题。
解决方法
MSDN 从未说过“所有没有主体的属性都是自动实现的属性”。他们可能会说“自动实现的属性没有主体”,但后者并不意味着前者。 MSDN 并不自相矛盾。
接口中没有主体的属性是 abstract
,而自动实现的属性是那些非抽象的、没有主体并且在类/结构中的属性。
因此,MyProperty1
中的 public MyInterface { int MyProperty1 {get;set;} }
不是自动实现的属性,而是抽象属性。
我不明白什么是声明没有正文的财产
就像在接口中声明两个没有主体的方法一样:
public MyInterfaceWithTwoMethods {
int GetMyProperty1();
void SetMyProperty1(int value);
}
除了在 C# 中使用属性更惯用。
您可以使用自动实现的属性实现 MyInterface
:
public class MyImpl : MyInterface {
public int MyProperty1 { get; set; }
}
即使您看起来只是在重复 MyInterface
中的内容,但这类似于像这样实现 MyInterfaceWithTwoMethods
:
public class MyImpl : MyInterfaceWithTwoMethods {
private int myProperty1;
int GetMyProperty1() => myProperty1;
void SetMyProperty1(int value) { myProperty1 = value; }
}
您还可以使用自动实现的属性实现 MyInterface
not:
public class MyImpl : MyInterface {
public int MyProperty1 {
get => 1;
set { Console.WriteLine("foo"); }
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。