我可以使用.set和.get属性做什么?

时间:2018-12-07 12:06:42

标签: c# properties visual-studio-2017

我有一个界面

public interface IIntf { string Foo { get; set; } }

和一个班级

class MyClass : IIntf
{
    public string Foo { get; private set; }
}

。现在我得到了编译器错误

  

'MyClass'没有实现接口成员'IIntf.Foo.set'。   “ MyClass.Foo.set”不是公开的。

因此,Foo.set似乎是它自己的实体(和Foo.get类似)。 我可以对他们做什么?如果是,那是什么?

例如我尝试使用Foo.set实现缺少的setter属性-Visual Studio甚至建议使用

enter image description here

但是我没有找到任何有效的语法。在遵循建议并尝试实现Foo.set方法时(由于已经有了,因此没有相应的get),我得到了另一种类型的编译器错误:

enter image description here

但是,由于Visual Studio会显示(有时会在键入代码时提出建议)Foo.setFoo.get,因此我认为可以使用它们完成某些工作。有什么想法吗?也许将方法重定向到仅getter / setter的一些好方法?还是其他?

2 个答案:

答案 0 :(得分:3)

处理@Kjara在评论中提出的问题/问题:

  1. 使用后面的getset methods实现属性 场景(由编译器提供)。
  2. 您无法轻易access /绕过这些 方法(没有reflection)。
  3. 定义属性时,必须 同时定义getset(您不能定义 一行上get,另一行上set
  4. 按照上面的@FrankM和@Dirk的说法-这里的混乱似乎源于IDE暗示(错误地)您可以分别定义getter和setter的事实。

答案 1 :(得分:-1)

public class MyClass : IIntf
{
    public string Foo { get; private set; }
    string IIntf.Foo { get => Foo; set => Foo = value; }
}