C#接口中自动实现的属性



我指的是Microsoft的文档-https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/auto-implemented-properties。它们指出,当get或set内部不需要额外的逻辑时,自动实现的属性基本上是没有主体的属性。因此CCD_ 1是一个自动实现的属性。本文件还说明了以下几点

声明1:"不能在接口中声明自动实现的属性。自动实现的属性声明私有实例支持字段,接口可能不声明实例字段">

但我可以在接口中声明自动实现的属性,如下所示

CCD_ 2。我们不能在接口中声明自动实现的属性,这和上面的说法不冲突吗。

然后,Microsoft文档中写道:声明2:"在不定义主体的情况下声明接口中的属性会声明具有访问器的属性,该访问器必须由实现该接口的每个类型实现">

我不明白什么是声明一个没有正文的属性,它不是自动实现的属性吗?如果是,那么第一个语句是否正确?

问题重要编辑: 我很抱歉,我错误地发布了带有此链接的问题:https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/interface-properties.虽然我打算提及以下链接:https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/auto-implemented-properties.我现在用正确的链接更新了我的问题。

MSDN从未说过类似";所有没有主体的属性都是自动实现的属性";。他们可能会说";自动实现的属性不具有主体";,但后者并不意味着前者。MSDN并没有自相矛盾。

接口中没有实体的属性是abstract,而自动实现的属性是非抽象的、没有实体的以及类/结构中的属性。

因此,public MyInterface { int MyProperty1 {get;set;} }中的MyProperty1不是一个自动实现的属性,而是一个抽象的属性。

我不明白什么是声明没有正文的属性

这就像在接口中声明两个没有实体的方法:

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而不是

public class MyImpl : MyInterface {
public int MyProperty1 { 
get => 1; 
set { Console.WriteLine("foo"); } 
}
}

相关内容

  • 没有找到相关文章

最新更新